假设我有一张地图M:Map<int, bool>(最初是空的)。这次我想更新。我有一个列表L = [1 .. 100],对于这个列表中的每个元素,我想将相应的值设置为Mfalse。所以像,[1 .. 100] |> List.map (fun x -> M.Add(x, false))。但是M.Add()每次都会返回一个新地图并且不会反映更新。如何以惯用的 F# 方式进行此更新?
您可以为此使用折叠:
let m = [1 .. 100]
|> List.fold( fun (acc:Map<int,bool>) x -> acc.Add(x, false)) Map.empty
Run Code Online (Sandbox Code Playgroud)
折叠采用累加器和当前值作为参数。您可以在此处使用 Add 方法返回更新后的 Map。
对于您的特定场景,您还可以考虑使用字典:
let m2 = [1 .. 100]
|>List.map(fun x->(x,false))
|>dict
Run Code Online (Sandbox Code Playgroud)