2010-11-26 11 views
8

que estoy tratando de crear un diccionario de una manera funcional. He jugado un poco con ella y fue capaz de concatenar dos diccionarios con este código:Trabajar con diccionarios inmutables

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

Es esta la forma correcta de trabajar con diccionarios inmutables en C#? Parece un poco complicado.

Respuesta

20

La función dict es sobre todo un ayudante que crea un diccionario de una lista si ya tiene una lista que contiene todos los elementos. No es tan útil en situaciones en las que desea agregar elementos, es decir, crear un nuevo diccionario que contenga todos los elementos del original y también algunos elementos nuevos.

En ese caso, es mejor utilizar el tipo 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") 

Para añadir todos los elementos de m1 a m2, es probable que escribir:

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

¿Qué pasa si desea utilizar Diccionario concurrente? ¿Puede Map reemplazar eso? Supongo que Map será un poco lento ya que devolverá un nuevo diccionario cada vez que agregue nuevos elementos. – Kafo