2012-02-08 24 views
5

questo è il mio primo post!Aggiunta a un dizionario all'interno di un dizionario

Non sono ancora un programmatore particolarmente fiducioso, ma ci sto arrivando.

Il mio problema è che ho un

static Dictionary<string, Dictionary<string, List<string>>> testDictionary = ... 

Se il dizionario non contiene la chiave corrente (stringa), posso facilmente aggiungere la chiave e un altro dizionario che è stato popolato, in questo modo .. .

testDictionary.Add(userAgentResult, allowDisallowDictionary); 

che funziona bene, il mio problema viene quando sto cercando di aggiungere il dizionario interno se la chiave userAgentResult esiste già.

speravo di farlo in questo modo ...

testDictionary[userAgentResult].Add(allowDisallowDictionary); 

ma il metodo .Add vuole due argomenti, vale a dire la chiave e la lista valore stringa. Così sono andato a scrivere questo codice ...

//this list as the dictionary requires a list 
    List<string> testDictionaryList = new List<string>(); 
    //this method returns a string 
    testDictionaryList.Add(regexForm(allowResult, url)); 
    //this will add the key and value to the inner dictionary, the value, and then  
    //add this value at the userAgentKey 
    testDictionary[userAgentResult].Add(allowDisallowKey, testDictionaryList); 

Questo funziona anche, è che questo dizionario è aggiunto il mio problema a numerose volte, e quando il dizionario interno contiene già la chiave che sta cercando di aggiungere, evidentemente errori. Quindi, quando

risposta

3

In questo caso, ciò che è necessario fare non è aggiungere una voce al dizionario interno. È necessario aggiungere il valore alla coppia chiave-valore del dizionario esterno. Solo che questa volta il valore sembra essere ancora un altro dizionario :)

testDictionary[userAgentResult] = allowDisallowDictionary;

+0

Ci dispiace che ci sia voluto così tanto tempo per me di rispondere, ma ho usato questo suggerimento ed è sembrato funzionare bene! –

+0

Ottimo! Se ritieni che questa sia la risposta giusta, contrassegnala come risposta. –

0

Hai bisogno di fare lo stesso per il dizionario interno che hai fatto per quello esterno. Innanzitutto controlla se esiste già una lista per questa chiave. Se non lo crea. Quindi utilizzare l'elenco esistente o creato.

1

Forse non capisco il problema. Prima di tutto assicuratevi che dizionari esistono in questo modo:

if (!testDictionary.ContainsKey(userAgentResult)) 
    testDictionary[userAgentResult] = new Dictionary<string, List<string>>(); 
if (!testDictionary[userAgentResult].ContainsKey(allowDisallowKey)) 
    testDictionary[userAgentResult][allowDisallowKey] = new List<string>(); 

Poi si è liberi di aggiungere elementi in questo modo:

testDictionary[userAgentResult][allowDisallowKey].Add("some value"); 
testDictionary[userAgentResult][allowDisallowKey].AddRange(someValueList); 
4

avrei probabilmente semplificare questo avendo un dizionario e unendo le chiavi così "simulare" un raggruppamento.

string key = userAgentResult + allowDisallowKey; 

static Dictionary<string, List<string> testDictionary = ... 

testDictionary[key] = list; 

È sufficiente gestire un dizionario.

+0

questo suggerimento mi ha aiutato, grazie –

+0

Questo semplifica il tutto. Saluti!! – Arjmand

1

Quando si utilizza dizionari nidificate Io di solito uso questo approccio:

private static Dictionary<string, Dictionary<string, List<string>>> _NestedDictionary = new Dictionary<string, Dictionary<string, List<string>>>(); 

private void DoSomething() 
{ 
    var outerKey = "My outer key"; 
    var innerKey = "My inner key"; 
    Dictionary<string, List<string>> innerDictionary = null; 
    List<string> listOfInnerDictionary = null; 

    // Check if we already have a dictionary for this key. 
    if (!_NestedDictionary.TryGetValue(outerKey, out innerDictionary)) 
    { 
     // So we need to create one 
     innerDictionary = new Dictionary<string, List<string>>(); 
     _NestedDictionary.Add(outerKey, innerDictionary); 
    } 

    // Check if the inner dict has the desired key 
    if (!innerDictionary.TryGetValue(innerKey, out listOfInnerDictionary)) 
    { 
     // So we need to create it 
     listOfInnerDictionary = new List<string>(); 
     innerDictionary.Add(innerKey, listOfInnerDictionary); 
    } 

    // Do whatever you like to do with the list 
    Console.WriteLine(innerKey + ":"); 
    foreach (var item in listOfInnerDictionary) 
    { 
     Console.WriteLine(" " + item); 
    } 
} 
Problemi correlati