使用排序Haskell对对列表进行排序

ErH*_*unt 2 haskell

我有一个函数(频率),它计算列表中每个不同值出现在该列表中的次数.例如,

frequency "ababca" 
Run Code Online (Sandbox Code Playgroud)

应该返回:

[(3, 'a'), (2, 'b'), (1, 'c')].
Run Code Online (Sandbox Code Playgroud)

这工作正常,但现在我需要使用此函数使用列表列表中的第一个元素对列表进行排序.

results   :: [Party ] -> [(Int, Party)]
results  xs = ??? frequency (sort xs) ??? 
Run Code Online (Sandbox Code Playgroud)

期望输出的例子:

[(1, "Green"), (2, "Red"), (3, "Blue")]
Run Code Online (Sandbox Code Playgroud)

以上不起作用,我不知道我能做什么.

使用常规'排序'

先感谢您.

dav*_*420 8

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

results xs = sortBy (compare `on` fst) (frequency xs)

-- or, if you prefer
results xs = sort (frequency xs)
Run Code Online (Sandbox Code Playgroud)

链接文档on,sortBy,compare,fst.

不同之处在于sort,按每个对的第一个元素的升序排序,打破与对的第二个元素的打破,同时sortBy (compare `on` fst)明确地仅查看每对的第一个元素.