2012-03-27 2 views
5

J'utilise un dictionnaire pour stocker certaines paires de valeurs clés et j'ai une question sur la meilleure façon de remplir le dictionnaire. J'ai besoin de faire d'autres opérations pour trouver et ajouter mes paires de valeurs clés à mon dictionnaire. Après ces opérations, j'ai peut-être trouvé une clé/valeur à ajouter au dictionnaire ou je n'aurais rien trouvé. Ma question est comment je devrais peupler le dictionnaire. Devrais-je utiliser une fonction qui renvoie une paire de valeurs de clé si elle est trouvée et sinon une paire vide contenue dans un dictionnaire. Add (function()) appel? Je ne veux pas ajouter des paires clé/valeur vides au dictionnaire, donc je ne sais pas comment l'appel de retour pour cette fonction fonctionnerait. Ou devrais-je passer le dictionnaire à la fonction et y ajouter si nécessaire? commeAjout de paires clé/valeur à un dictionnaire

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

Pourquoi ne pas utiliser le natif Dictionnaire ? Il gère déjà le stockage, a une méthode ContainsKey pour vérifier l'existence de la clé, et vous pouvez utiliser LINQ pour retourner les entrées KeyValuePair ? –

+0

Je cherche le meilleur moyen de peupler un objet Dictionary . Afin de le peupler, j'ai besoin d'effectuer d'autres opérations pour trouver des objets à placer dans la dict. Par conséquent, devrais-je pousser ces opérations à une méthode et lui faire retourner une paire keyvalue pour ensuite ajouter au dic? ou devrais-je passer le dict nouvellement créé et le passer à la fonction à ajouter si des valeurs sont trouvées? –

+0

Cela dépend vraiment de ce que vous essayez de faire avec cette méthode, et si elle devrait avoir cette capacité. D'après ce que je comprends, je voudrais juste pousser dans le dictionnaire, et laisser la méthode faire son travail. Ce sera le plus facile à mettre en œuvre. –

Répondre

10

Je ne sais pas ce que vous demandez, mais voici comment je gère le dictionnaire pour ajouter ou mettre à jour une valeur basée sur une clé:

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

Vous pouvez envelopper cela dans une méthode si vous comme:

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"); 

Vous pouvez également utiliser la méthode TryGetValue mais ne peut pas voir un avantage évident dans ce domaine.

+2

Peut-être qu'il me manque quelque chose, mais dict [key] = value ajoute ou met à jour la valeur (l'ensemble appelle "private void Insert (clé TKey, valeur TValue, bool add)"). – user276648

+0

@ user276648 J'étais le grand perdant de sens, vous avez totalement raison! Je travaillais avec des dictionnaires en ASP classique et je devinais que la syntaxe restait bloquée. N'hésitez pas à poster une nouvelle réponse de cette façon simple afin que les autres puissent connaître le passeur. –

3

votre pseudo code est correct.

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

vous pouvez aussi utiliser une méthode d'extension:

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 pour la méthode d'extension, n'y pensait pas. :) –

Questions connexes