Haskell中的groupByKey - 如何通过函数对列表中的项进行分组?

时间:2017-12-19 06:44:03

标签: haskell

鉴于列表[v]和键控函数f :: v -> k,我想生成一个地图Map k [v]。 Haskell中是否存在类似的内容?

import Data.Map

groupByKey :: (v -> k) -> [v] -> Map k [v]

1 个答案:

答案 0 :(得分:8)

您可以使用fromListWith,如下所示:

import Data.Map
groupByKey :: (Ord k) => (v -> k) -> [v] -> Map k [v]
groupByKey getkey
  = fromListWith (++) . fmap (\val -> (getkey val, [val]))

这样:

> groupByKey length $ words "hello there my good friend"
fromList [(2,["my"]),(4,["good"]),(5,["there","hello"]),(6,["friend"])]
>