鉴于列表[v]
和键控函数f :: v -> k
,我想生成一个地图Map k [v]
。 Haskell中是否存在类似的内容?
import Data.Map
groupByKey :: (v -> k) -> [v] -> Map k [v]
答案 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"])]
>