簡體   English   中英

按第二個元素對元組列表進行排序

[英]Sort a list of tuples by their second elements

我想按照第二個元素對元組列表進行排序。

輸入示例:

[("Bob",3),("Terry",1)]

示例輸出:

[("Terry",1)("Bob",3)]

另一個很酷的技巧是從Data.Function使用on

import Data.Function (on)
import Data.List (sortBy)

sortBy (compare `on` snd) [...]

沒有什么不同, comparing但不時是一個很好的技巧。

您可以使用sortBycomparing

sortBy :: (a -> a -> Ordering) -> [a] -> [a]
comparing :: (Ord b) => (a -> b) -> a -> a -> Ordering

在這種情況下,我們想要通過第二個元素進行比較。 你可以使用comparing snd來獲得一個可以通過第二個元素比較兩個元組的函數。

考慮“常規”排序

sort xs = ... a < b ...

這種排序必須使用compare ,或其朋友,如< 因此,如果你已經實現了這樣的事情,那么你可以改為compare (snd a) (snd b)或者snd a < snd b而不是僅僅compare aba < b snd a < snd b

sort xs = ... snd a < snd b ...

當然,如果你變得聰明,你將抽象出“訪問者”,並使其成為排序功能的額外輸入:

sortComparingOn f xs = ... f a < f b ...

你甚至可能完全抽象出比較器:

sortBy cmp xs = ... a `cmp` b ...

sortBy中提供了sortBy,如第三篇所述。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM