Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在F#映射集合中求和值_F# - Fatal编程技术网

如何在F#映射集合中求和值

如何在F#映射集合中求和值,f#,F#,我有一个映射图,我想在这里对所有值求和 它将被用作玩具拼写校正器中的单词词典 天真的企图 let wc myMap = Map.toSeq myMap |> Seq.sumBy (fun kvp -> (snd kvp)) 错误FS071考虑添加其他类型约束< /P> 尝试1 type MapFn = Map<string,int> -> int let wc:MapFn = (function wm ->

我有一个
映射图
,我想在这里对所有值求和

它将被用作玩具拼写校正器中的单词词典

天真的企图

let wc myMap =
    Map.toSeq myMap
    |> Seq.sumBy (fun kvp -> (snd kvp))

<强>错误FS071<强>考虑添加其他类型约束< /P> 尝试1

type MapFn = Map<string,int> -> int
let wc:MapFn = (function wm ->
                            Map.toSeq wm
                            |> Seq.sumBy (fun kvp -> (snd kvp)))

还想知道类型
Map
是否是我字典的最佳选择。

Map元素是键/值对(在您的示例中是键/值对),而不是元组。因此,您应该使用kvp.Value而不是snd kvp,例如:

myMap |> Seq.sumBy(fun item -> item.Value )
或者使用Map.fold

myMap |> Map.fold (fun state key value -> state + value)  0

只需添加一点,在他的
Map.fold
示例中,使用
+
运算符和初始
0
状态,编译器推断出您的函数最通用的类型是
Map
myMap |> Seq.sumBy(fun item -> item.Value )
myMap |> Map.fold (fun state key value -> state + value)  0