我需要根据每个元组的第二个元素对元组进行排序,但显然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. 按Python中第n个元素搜索元组列表
- 2. 列表形式的列表中的每个第n个元素
- 3. 仅使用列表的第N个元素进行操作
- 4. 如何选择上使用XPath从元素列表病房第n个元素
- 5. 在Haskell列表中访问列表中的第n个元素
- 6. 使用BeautifulSoup获取第n个元素
- 7. 如何从python中的元组列表中提取第n个元素?
- 8. 如何获得配对元组列表中的第n个元素?
- 9. 重新排列数组中的每一个第n个元素
- 10. 获取元素相对于第n个父元素的位置
- 11. 如何使用m个元素从n个列表中列出每个元素的组合? (Python)
- 12. 通过base px * n第n个元素缩进每个第n个元素
- 13. Prolog - 给出列表中的每个第n个元素
- 14. 指定python列表中的每个第N个元素
- 15. Javascript:使用阵列的每第n个元素
- 16. 如何从Haskell的10元组中获得第n个元素?
- 17. r-concatenate列表中的n个元素
- 18. 在For循环中查找列表中的第N个元素
- 19. Zen第n个元素
- 20. Powershell:如何引用第n个元素
- 21. 只加总元组列表中的第二个元素
- 22. 排序第2元组元素的元组的列表
- 23. 序言:查找列表中的第N个元素
- 24. Haskell:在元组列表中找到第一个元素x的元组
- 25. 计划中的第n个元素
- 26. 在matlab单元阵列中选择第n个元素
- 27. 返回列表中每个元素的第一个元素?
- 28. 如何调用python日期列表中的每个第n个元素?
- 29. 从列表中删除第n个元素
- 30. 从列表中提取第n个元素