2012-02-08 18 views
5

içinde Sözlüğe ekleme bu benim ilk yazı!bir sözlüğe

Ben özellikle güvenen programcı henüz değilim ama orada alıyorum.

Sorunum sözlük akım anahtarı (dize) içermiyorsa, kolayca anahtarı ve böylece gibi doldurulan Başka bir sözlük ekleyebilir Ben

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

olması .. . gayet iyi çalışıyor

testDictionary.Add(userAgentResult, allowDisallowDictionary); 

, benim sorunum ben userAgentResult Anahtar zaten varsa iç sözlüğü eklemek için çalışıyorum geliyor.

Bu şekilde bunu yapmak için umuyordum ...

testDictionary[userAgentResult].Add(allowDisallowDictionary); 

ama .Add yöntem iki argüman, yani dize anahtar ve liste değerini istiyor. Bu yüzden ... Bu kod yazmak üzerine

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

da çalışır Bu, benim sorunum bu sözlükte pek çok kez eklenir olduğunu gitti ve iç Sözlük zaten eklenecek çalışıyor anahtarı içerdiğinde, Açıkçası hatalar. Yani

cevap

3

. Değeri, dış sözlüğün anahtar/değer çiftine eklemeniz gerekir. Sadece değer olur bu kez bir başka sözlük :)

testDictionary[userAgentResult] = allowDisallowDictionary;

+0

Maalesef o! –

+0

Büyük! Bunun doğru cevap olduğunu düşünüyorsanız, lütfen cevap olarak işaretleyin. Bu öneri bana yardımcı –

0

Sen dış biri için yaptığı iç sözlüğe için aynı şeyi gerektiğinde. İlk önce bu tuş için bir listenin mevcut olup olmadığını kontrol edin. Eğer yaratmazsa. Sonra var olan veya oluşturulmuş listeyi kullanın. Eğer iç sözlüğe bir giriş ekleyerek değildir yapmanız gerekenler Bu durumda

1

Belki sorununuzu alamadım olmak. "Simüle"

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

Muhtemelen bu işi kolaylaştırabilir bir sözlüğü olan ve bu nedenle tuşlarını katılarak:

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

Sonra şöyle öğeler eklemek için ücretsiz şunlardır: Birincisi sözlükleri şöyle bulunduğundan emin olmak Bir gruplama.

string key = userAgentResult + allowDisallowKey; 

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

testDictionary[key] = list; 

Sadece bir sözlüğü yönetmeniz gerekiyor.

+0

, teşekkür –

+0

Bu seferki şeyi kolaylaştırır. Alkış !! – Arjmand

1

iç içe sözlükleri kullanırken ben normalde bu yaklaşımı kullanın: ince iş gibi görünüyordu etti beni cevap vermek için bu kadar geç, ama bu öneri kullanılan ve gelmiştir

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); 
    } 
} 
İlgili konular