我需要根據每個元組的第二個元素對元組進行排序,但顯然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. 只加總元組列表中的第二個元素