2009-10-28 14 views
5

Así que estoy recorriendo algunos objetos e inicializando un objeto Dictionary>.Agregar elementos a un diccionario <int, List <int>>

Así que primero tengo que comprobar si existe la clave, si lo hace voy a añadir a la Lista de

Si no es así, voy a crear una nueva clave y la nueva lista de

es que la lógica correcta ?
voy a tener que hacer un:

new List<int>(); 

la primera vez que inserta un artículo correcto?

es decir .:

if(myDic.ContainsKey(car.ID)) 
{ 
     myDic[car.ID].Add(car.MfgID); 
} 
else 
{ 
    myDic.Add(car.ID, new List<int>); 
    myDic[car.ID].Add(car.MfgID); 
} 

Respuesta

19

Su enfoque funciona bien. Es un poco ineficiente ya que requiere dos búsquedas en el diccionario (una para Contains y otra para agregar el elemento a la lista). Puede hacerlo de manera más eficiente el uso de Dictionary.TryGetValue método:

List<int> list; 
if (!myDic.TryGetValue(car.ID, out list)) 
    myDic.Add(car.ID, list = new List<int>()); 
list.Add(car.MfgId); 

Es más eficiente para llenar la lista y agregarlo al diccionario de una sola vez (si es posible en su caso, por supuesto). En C# 3.0, hay una característica llamada inicializadores de colección que hace que sea fácil de llenar una lista si los artículos son conocidos en tiempo de compilación:

var list = new List<int> { 1, 9, 8, 9, 1, 8, 1, 2 }; 

También puede considerar el uso de something like this to map a key to multiple values.

+0

Genial, ahora usted y Reed solo necesitan combinar ambas respuestas en una :) :) –

+0

Ah, y también vale la pena mencionar los inicializadores de recopilación. –

+0

@Pavel: mi respuesta elimina la necesidad de reordenamiento mencionado en la respuesta de Reed. Siempre hace una sola búsqueda del diccionario. –

Cuestiones relacionadas