2012-02-08 46 views
5

đây là bài đăng đầu tiên của tôi!Thêm vào từ điển trong từ điển

Tôi không phải là một lập trình viên đặc biệt tự tin nhưng đang đến đó.

Vấn đề của tôi là tôi có một

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

Nếu điển không chứa chìa khóa hiện tại (string), tôi có thể dễ dàng thêm chìa khóa và một từ điển đã được dân cư, như vậy .. .

testDictionary.Add(userAgentResult, allowDisallowDictionary); 

Điều đó có tác dụng khi tôi cố gắng thêm từ điển bên trong nếu khóa UserAgentResult đã tồn tại.

Tôi đã hy vọng để làm điều đó theo cách này ...

testDictionary[userAgentResult].Add(allowDisallowDictionary); 

nhưng phương pháp .Add muốn hai đối số, ví dụ: chuỗi chìa khóa và danh sách giá trị. Vì vậy, tôi tiếp tục viết mã này ...

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

này cũng làm việc, vấn đề của tôi được là từ điển này sẽ được thêm vào nhiều lần, và khi từ điển bên trong đã có chứa chìa khóa mà đang cố gắng để được thêm vào, nó rõ ràng là lỗi. Vì vậy, khi

Trả lời

3

Trong trường hợp này, những gì bạn cần làm là không thêm mục nhập vào từ điển bên trong. Bạn cần phải thêm giá trị vào cặp khóa-giá trị của từ điển bên ngoài. Chỉ thời gian này, giá trị sẽ xảy ra là thêm một từ điển :)

testDictionary[userAgentResult] = allowDisallowDictionary;

+0

Xin lỗi rằng nó đã đi quá lâu đối với tôi để trả lời, nhưng tôi đã sử dụng đề nghị này và nó đã dường như làm việc tốt! –

+0

Tuyệt vời! Nếu bạn cảm thấy đây là câu trả lời đúng, vui lòng đánh dấu nó là câu trả lời. –

0

Bạn cần phải làm tương tự cho từ điển bên trong mà bạn đã làm cho từ bên ngoài. Trước tiên hãy kiểm tra xem danh sách đã tồn tại cho khóa này chưa. Nếu không tạo ra nó. Sau đó, sử dụng danh sách đã tồn tại hoặc đã được tạo.

1

Có lẽ tôi không nhận được vấn đề của bạn. Trước tiên hãy chắc chắn rằng từ điển tồn tại như vậy:

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

Sau đó, bạn có thể tự do thêm các mục như sau:

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

tôi có lẽ sẽ đơn giản hóa này bởi có một từ điển và tham gia các phím như vậy "mô phỏng" một nhóm.

string key = userAgentResult + allowDisallowKey; 

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

testDictionary[key] = list; 

Bạn chỉ cần quản lý một từ điển.

+0

đề xuất này đã giúp tôi, cảm ơn –

+0

Điều này đơn giản hóa toàn bộ điều. Chúc mừng !! – Arjmand

1

Khi sử dụng từ điển lồng nhau tôi thường sử dụng phương pháp này:

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); 
    } 
} 
Các vấn đề liên quan