2012-03-27 19 views
5

sto usando un dizionario per memorizzare alcune coppie di valori chiave e ho una domanda sul modo migliore per popolare il dizionario. Devo fare alcune altre operazioni per trovare e aggiungere le mie coppie di valori chiave al mio dizionario. Dopo quelle operazioni potrei aver trovato una chiave/valore da aggiungere al dizionario o non avrei potuto trovare nulla. La mia domanda è come dovrei popolare il dizionario. Dovrei usare una funzione che restituisce una coppia di valori chiave se trovata e, in caso contrario, una vuota contenuta in una chiamata dictionary.Add (function())? Non voglio aggiungere coppie chiave/valore vuote al dizionario quindi non sono sicuro di come funzionerebbe la chiamata di ritorno per quella funzione. O dovrei passare il dizionario alla funzione e aggiungerlo se necessario? comeAggiunta di coppie chiave/valore a un dizionario

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

perché non utilizzare il nativo Dictionary ? Gestisce già lo storage, ha un metodo ContainsKey per il controllo dell'esistenza delle chiavi e puoi utilizzare LINQ su di esso per restituire le voci KeyValuePair ? –

+0

Sto cercando il modo migliore per popolare un oggetto . Per popolarlo, ho bisogno di eseguire alcune altre operazioni per trovare oggetti da inserire nel testo. Pertanto, dovrei spingere quelle operazioni a un metodo e farlo restituire una coppia di valori chiave per poi aggiungerli al dic? o devo passare il dettato appena creato e passarlo alla funzione per aggiungerlo se vengono trovati valori? –

+0

Dipende davvero da cosa si sta tentando di fare con questo metodo e se dovrebbe avere quell'abilità. Dalla mia comprensione, vorrei solo spingere il dizionario e lasciare che il metodo faccia il suo lavoro. Sarà il più semplice da implementare. –

risposta

10

Non sei sicuro di ciò che si chiede qui, ma ecco come mi occupo di dizionario per aggiungere o aggiornare un valore basato su una chiave:

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

si può avvolgere questo in un metodo se si come:

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

È inoltre possibile utilizzare il metodo TryGetValue, ma non si vede alcun vantaggio evidente in questo.

+2

Forse mi manca qualcosa, ma dict [chiave] = valore aggiunge o aggiorna il valore (l'insieme chiama "private void Insert (chiave TKey, valore TValue, bool add)"). – user276648

+0

@ user276648 Io ero quello che mancava un grosso chuck of sense, hai perfettamente ragione! Ero abituato a lavorare con i dizionari nell'ASP classico e indovinare la sintassi appena bloccata. Sentiti libero di postare nuove risposte con quel modo semplice così gli altri potranno conoscere il setter. –

3

il tuo pseudo codice è giusto.

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

si potrebbe anche usare un metodo di estensione:

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 per il metodo di estensione, non ci ho pensato. :) –

Problemi correlati