添加到字典中的字典

时间:2012-02-08 22:44:32

标签: c# .net dictionary

我不是一个特别自信的程序员,但我到了那里。

我的问题是我有一个

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

如果词典没有包含当前键(字符串),我可以轻松添加键和已填充的另一个字典,如此...

   testDictionary.Add(userAgentResult, allowDisallowDictionary);

这很好用,当我尝试添加内部字典时,如果userAgentResult Key已经存在,我的问题就来了。

我希望这样做......

    testDictionary[userAgentResult].Add(allowDisallowDictionary);

但.Add方法需要两个参数,即字符串键和列表值。所以我继续写这段代码......

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

这也有效,我的问题是这个字典被添加了很多次,而当内部字典已经包含了试图添加的密钥时,它显然是错误的。所以当

5 个答案:

答案 0 :(得分:4)

我可能会通过使用一个字典并加入密钥来简化这一过程,从而“模拟”分组。

 string key = userAgentResult + allowDisallowKey;

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

 testDictionary[key] = list;

您只需要管理一个词典。

答案 1 :(得分:3)

在这种情况下,您需要做的是不向内部字典添加条目。您需要将值添加到外部字典的键值对。只有这次价值碰巧是另一个字典:)

testDictionary[userAgentResult] = allowDisallowDictionary;

答案 2 :(得分:1)

也许我没有得到你的问题。首先确保字典存在如下:

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

然后你可以自由添加这样的项目:

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

答案 3 :(得分:1)

使用嵌套词典时,我通常使用这种方法:

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

答案 4 :(得分:0)

你需要对你为外部词典做的内部词典做同样的事情。首先检查此密钥是否已存在。如果没有创建它。然后使用已存在或已创建的列表。