Работа с неизменными словарями - PullRequest
8 голосов
/ 26 ноября 2010

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

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

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

1 Ответ

21 голосов
/ 26 ноября 2010

Функция 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...