在 F# 中多次更新地图

Rob*_*131 3 f# dictionary

假设我有一张地图M:Map<int, bool>(最初是空的)。这次我想更新。我有一个列表L = [1 .. 100],对于这个列表中的每个元素,我想将相应的值设置为Mfalse。所以像,[1 .. 100] |> List.map (fun x -> M.Add(x, false))。但是M.Add()每次都会返回一个新地图并且不会反映更新。如何以惯用的 F# 方式进行此更新?

Koe*_*ear 6

您可以为此使用折叠:

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)