jkr*_*mer 24
take x $ sortBy (compare `on` fst) [("asd", 1), ...]
Run Code Online (Sandbox Code Playgroud)
take x
从排序列表中获取前x个项目.sortBy
使用作为第一个参数给出的排序函数对作为第二个参数给出的列表进行排序.(compare `on` fst)
比较每个元组的第一个值.请注意,此示例比较每个元组的第一个值以进行排序.要按第二个值排序,请替换fst
为snd
.
您会看到该sortBy
函数非常通用,因为它允许您定义用于比较值的函数.该函数有两个参数,应该返回LT,EQ或GT中的一个.请注意,该函数compare
需要两个参数派生自Ord
.辅助函数on
可以在模块中找到Data.Function
.该功能sortBy
在模块中Data.List
.
编辑:这是一个完整的工作示例,通过比较它们的第一个值来排序元组列表,并打印结果列表的前2个元组.请注意,我用on
上面的示例替换了上面的示例,该函数显示了on
内部的内容.
import Data.Function
import Data.List
main = print $ mySort [("foo", 1), ("bar", 2), ("baz", 3), ("quux", 4)] 2
mySort list x = take x $ sortBy (\ x y -> compare (fst x) (fst y)) list
Run Code Online (Sandbox Code Playgroud)
编辑:正如Tom Lokhorst在他的评论中指出的那样,comparing
模块中的函数Data.Ord
是一个更易读的替换/快捷方式on compare
,所以上面的内容也可以写成sortBy (comparing fst)
.