我需要根据每个元组的第二个元素对元组进行排序,但显然usort/1只能与第一个元素一起使用。所以我必须交换元素,将它们放回去并交换回来。是否有更简单的方法?还有一种按降序排序的方法(我知道排序和逆转可以完成,但只是想知道)。列表:用于元组中第n个元素的使用
2
A
回答
4
您是否试过keysort/2函数(或其对应的ukeysort/2)?
> lists:reverse(lists:keysort(2, [{a,2}, {b,1}, {c, 3}])).
[{c,3},{a,2},{b,1}]
如果你不排序非常大的列表,这可能是你可以得到的最可读的解决方案。
0
应该不会太难写自己的排序功能(改编自一个常见的例子):
qsort([]) -> [];
qsort([Pivot|Tail]) ->
{PivotFirst, PivotSecond} = Pivot,
qsort([{FirstElement, SecondElement} || {FirstElement,SecondElement} <- Tail, SecondElement < PivotSecond])
++ [Pivot] ++
qsort([{FirstElement, SecondElement} || {FirstElement,SecondElement} <- Tail, SecondElement >= PivotSecond]).
3
其实,一个更好的答案:
有这需要排序的第二个版本分类功能:
lists:sort(Fun, List1) -> List2
下面是排序在第二元件上在元组中的一个示例:
lists:sort(fun(A, B) ->
{A1, A2} = A,
{B1, B2} = B,
if
A2 > B2 ->
false;
true ->
true
end
end, YourList).
2
的bmdhacks'解决方案的一个改进版本:
lists:sort(fun(A, B) ->
{_, A2} = A,
{_, B2} = B,
A2 =< B2
end, YourList).
下划线更好然后A1和B1,因为编译器会给出警告 那些。
要按降序排列,只需将< =更改为> =。
相关问题
- 1. 更新嵌套列表中第n个元素的第n个元素
- 2. 按Python中第n个元素搜索元组列表
- 3. 使用Haskell在列表中查找第n个元素
- 4. 列表形式的列表中的每个第n个元素
- 5. 仅使用列表的第N个元素进行操作
- 6. 如何选择上使用XPath从元素列表病房第n个元素
- 7. 使用第一个元素作为键加入元组列表
- 8. 在Haskell列表中访问列表中的第n个元素
- 9. 使用BeautifulSoup获取第n个元素
- 10. 如何使用python list comprehensions更改列表列表中的第n个元素?
- 11. 如何从python中的元组列表中提取第n个元素?
- 12. 如何获得配对元组列表中的第n个元素?
- 13. 从元素数组中选择第n个元素jquery
- 14. 重新排列数组中的每一个第n个元素
- 15. 引用元组列表中的元素
- 16. 获取元素相对于第n个父元素的位置
- 17. 如何使用m个元素从n个列表中列出每个元素的组合? (Python)
- 18. 通过base px * n第n个元素缩进每个第n个元素
- 19. Prolog - 给出列表中的每个第n个元素
- 20. Python:运行列表中每个第n个元素的函数
- 21. 从python 2.7的列表中删除每个第n个元素
- 22. 指定python列表中的每个第N个元素
- 23. Javascript:使用阵列的每第n个元素
- 24. 如何从Haskell的10元组中获得第n个元素?
- 25. r-concatenate列表中的n个元素
- 26. 在For循环中查找列表中的第N个元素
- 27. Zen第n个元素
- 28. Powershell:如何引用第n个元素
- 29. 计算元组列表中第i个元素的平均值
- 30. 只加总元组列表中的第二个元素