2010-11-26 2 views
8

Я пытаюсь создать словарь функциональным способом. Я немного играл с ним и был в состоянии объединить два словаря с этим кодом:Работа с неизменяемыми словарями

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

Это правильный способ работы с неизменяемыми словарях F #? Это кажется немного сложным.

ответ

20

Функция 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 
+0

Что делать, если вы хотите использовать Параллельный словарь? Может ли Карта заменить это? Я предполагаю, что Карта будет немного медленной, так как она будет возвращать новый словарь каждый раз, когда я добавляю новые элементы? – Kafo 2017-12-01 01:41:25

Смежные вопросы