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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.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#_Dictionary - Fatal编程技术网

F# 使用不可变词典

F# 使用不可变词典,f#,dictionary,F#,Dictionary,我正试图以一种实用的方式创建一本词典。我对它进行了一些操作,并能够使用以下代码连接两个字典: let d1 = dict [(1, "one"); (2, "two")] let d2 = dict [(4, "four")] let d = List.ofSeq d1 @ List.ofSeq d2 这是在F#中使用不可变字典的正确方法吗?这似乎有点复杂。如果您已经有一个包含所有项目的列表,那么dict函数主要是一个帮助程序,它可以从列表中创建字典。在需要添加元素的情况下,它并不是那么有用—

我正试图以一种实用的方式创建一本词典。我对它进行了一些操作,并能够使用以下代码连接两个字典:

let d1 = dict [(1, "one"); (2, "two")]
let d2 = dict [(4, "four")]
let d = List.ofSeq d1 @ List.ofSeq d2

这是在F#中使用不可变字典的正确方法吗?这似乎有点复杂。

如果您已经有一个包含所有项目的列表,那么
dict
函数主要是一个帮助程序,它可以从列表中创建字典。在需要添加元素的情况下,它并不是那么有用——也就是说,创建包含原始字典的所有元素以及一些新元素的新字典

在这种情况下,最好使用
Map
类型

// Create map from a list
let m1 = Map.ofSeq [ (1, "one"); (2, "two") ]
// Create map from original map by adding one element
let m2 = m1.Add(4, "four")
要将
m1
的所有元素添加到
m2
,您可能会编写:

let newM2 = m1 |> Seq.fold (fun m (KeyValue(k, v)) -> Map.add k v m) m2

如果你想使用并发字典怎么办?地图能代替它吗?我想Map会有点慢,因为每次我添加新元素时它都会返回一个新字典?