小编k1r*_*r4n的帖子

Haskell - 如何在排序后从元组列表中获取n个项目

嗨,我是哈斯克尔的初学者.我想从这个元组列表中获取前3个项目:

[("and",2),("cat",1),("dog",1),("rabbit",1),("the",2)]
Run Code Online (Sandbox Code Playgroud)

首先,我按频率和降序对列表进行排序:

sortWords =  sortBy(flip compare `on` snd)
Run Code Online (Sandbox Code Playgroud)

这给了我结果:

[("and",2),("the",2),("cat",1),("dog",1),("rabbit",1)]
Run Code Online (Sandbox Code Playgroud)

然后我知道我可以做这个功能:

take 3 [("and",2),("the",2),("cat",1),("dog",1),("rabbit",1)] 
Run Code Online (Sandbox Code Playgroud)

这给了我想要的结果[("and",2),("the",2),("cat",1)]

但是,我希望能够将该take功能合并到该sortWords功能中.问题是,当我尝试这样做时,例如:

sortWords =  take 3 (sortBy(flip compare `on` snd))
Run Code Online (Sandbox Code Playgroud)

这不起作用.

理想情况下,我想保留sortWords作为结束函数,所以我不想将它传递给另一个能够执行该take函数.如果有一种方法可以take在调用之前执行,sortWords这可能是一个解决方案,但是我也尝试了这一点,并发现所采取的单词不是先排序,因此不会给我我想要的结果.

谢谢

haskell list take

2
推荐指数
1
解决办法
181
查看次数

标签 统计

haskell ×1

list ×1

take ×1