2012-03-27 12 views
5

Estoy usando un diccionario para almacenar algunos pares de valores clave y tengo una pregunta sobre la mejor manera de poblar el diccionario. Necesito hacer algunas otras operaciones para encontrar y agregar mis pares de valores clave a mi diccionario. Después de esas operaciones, pude haber encontrado una clave/valor para agregar al diccionario o no podría haber encontrado nada. Mi pregunta es cómo debería poblar el diccionario. ¿Debo usar una función que devuelve un par de valores clave si se encuentra y, de lo contrario, uno vacío dentro de un diccionario. Añadir (función()) llamada? No quiero agregar pares vacíos de clave/valor al diccionario, así que no estoy seguro de cómo funcionaría la devolución de llamada para esa función. ¿O debería pasar el diccionario a la función y agregarlo si fuera necesario? comoAgregando pares de clave/valor a un diccionario

function(dictionary) 
{ if (pair found) {dictionary.add(pair)}} 
+1

Por qué no usar el diccionario nativa ? Ya administra el almacenamiento, tiene un método ContainsKey para verificar la existencia de claves, y puede usar LINQ en él para devolver las entradas de KeyValuePair . –

+0

estoy buscando la mejor manera de poblar un objeto Dictionary . Para poblarlo, necesito realizar algunas otras operaciones para encontrar objetos para colocar en el dict. Por lo tanto, ¿debo pasar esas operaciones a un método y hacer que devuelva un par de valores clave para luego agregar al dic? ¿o debería pasar el dict recién creado y pasarlo a la función para agregarlo si se encuentran los valores? –

+0

Realmente depende de lo que intentes hacer con este método y de si debe tener esa capacidad. Desde mi punto de vista, simplemente insertaría el diccionario y dejaría que el método hiciera su trabajo. Será el más fácil de implementar. –

Respuesta

10

No está seguro de lo que se pide aquí, pero aquí es cómo manejo diccionario para agregar o actualizar un valor basado en una clave:

string key = "some key here"; 
string value = "your value"; 
if (myDict.ContainsKey(key)) 
{ 
    myDict[key] = value; 
} 
else 
{ 
    myDict.Add(key, value); 
} 

se puede envolver esto en un método si como:

void AddOrUpdate(Dictionary<string, string> dict, string key, string value) 
{ 
    if (dict.ContainsKey(key)) 
    { 
     dict[key] = value; 
    } 
    else 
    { 
     dict.Add(key, value); 
    } 
} 

//usage: 
AddOrUpdate(myDict, "some key here", "your value"); 

también puede utilizar el método TryGetValue pero no puede ver ninguna ventaja obvia en esto.

+2

Quizás me falta algo, pero dict [key] = value agrega o actualiza el valor (el conjunto llama "private void Insert (TKey key, TValue value, bool add)"). – user276648

+0

@ user276648 ¡Yo era el que faltaba mucho de sentido común, tienes toda la razón! Solía ​​trabajar con diccionarios en ASP clásico y supongo que la sintaxis se ha quedado atascada. No dude en publicar una nueva respuesta de esa manera simple para que otros conozcan al colocador. –

3

su pseudo código es correcto.

public void Process(bool add, Dictionary<string, string> dictionary) 
{ 
    if(add) dictionary.Add("added", "value"); 
} 

también se puede utilizar un método de extensión:

static class Program 
{ 
    public static void AddIfNotNull(this Dictionary<string,object> target, string key, object value) 
    { 
     if(value != null) 
      target.Add(key, value); 
    } 

    static void Main(string[] args) 
    { 
     var dictionary = new Dictionary<string, object>(); 

     dictionary.AddIfNotNull("not-added", null); 
     dictionary.AddIfNotNull("added",  "true"); 

     foreach(var item in dictionary) 
      Console.WriteLine(item.Key); 

     Console.Read(); 
    } 

} 
+0

+1 para el método de extensión, no lo pensé. :) –

Cuestiones relacionadas