[英]How can I sum a list of tuples in Haskell?
這是一個超級簡單的問題,但我似乎找不到答案。 假設我在 Haskell 中有一個元組列表,
myList = [("foo", 2), ("bar", 4), ("foo", 6), ("bar", 1)]
我想按第一個元素對它們進行分組,然后在第二個元素上總結它們,我該怎么做?
此示例將輸出[("foo", 8), ("bar", 5)]
這在很大程度上取決於您的鍵(元組中的第一個元素)是Ord
還是僅Eq
。 如果它僅在Eq
,那么基於partition
的方法就可以了:
import Data.List (partition)
sumByKey :: (Eq k, Num v) => [(k, v)] -> [(k, v)]
sumByKey [] = []
sumByKey ((k,v):xs) = (k,v + sum vs) : sumByKey bs
where
vs = map snd ks
(ks, bs) = partition ((k ==) . fst) xs
但是,如果您手頭有Ord
並且可以很好地處理外部依賴項,那么Map
可以使代碼更容易:
import Data.Map.Strict
sumByKey :: (Ord k, Num v) => [(k, v)] -> [(k, v)]
sumByKey = toList . fromListWith (+)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.