[英]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
但不时是一个很好的技巧。
考虑“常规”排序
sort xs = ... a < b ...
这种排序必须使用compare
,或其朋友,如<
。 因此,如果你已经实现了这样的事情,那么你可以改为compare (snd a) (snd b)
或者snd a < snd b
而不是仅仅compare ab
或a < 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.