gpt4 book ai didi

f# - 如何对 F# Map 集合中的值求和

转载 作者:行者123 更新时间:2023-12-04 09:15:00 25 4
gpt4 key购买 nike

我有一个 Map<string,int>我想对所有值求和的地方。
它将用作玩具拼写校正器中的单词词典,描述为 here .
幼稚的尝试

let wc myMap =
Map.toSeq myMap
|> Seq.sumBy (fun kvp -> (snd kvp))
错误 FS0071 考虑添加更多类型约束
尝试 1
type MapFn = Map<string,int> -> int
let wc:MapFn = (function wm ->
Map.toSeq wm
|> Seq.sumBy (fun kvp -> (snd kvp)))
尝试 2
type WordMap = WordMap of Map<string,int>
let wc (WordMap wm) =
Map.toSeq wm
|> Seq.sumBy (fun kvp -> (snd kvp))
两种尝试都有效,但我希望代码更整洁。像 Python 中的示例代码 sum(WORDS.values()) .
WORDS = Counter(words(open('big.txt').read()))

def P(word, N=sum(WORDS.values())):
return WORDS[word] / N
还想知道是否输入 Map<string,int>是我字典的最佳选择。

最佳答案

Map 元素是一个键/值对(在您的示例中为 KeyValuePair ),而不是元组。所以你应该使用 kvp.Value 而不是 snd kvp,例如:

myMap |> Seq.sumBy(fun item -> item.Value )
或使用 Map.fold
myMap |> Map.fold (fun state key value -> state + value)  0

关于f# - 如何对 F# Map 集合中的值求和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63270841/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com