首页 > 解决方案 > 如何将值添加到 2D 字典

问题描述

我有这本字典,我想在其中映射新值

Dictionary<string, Dictionary<string, int>> myDictionary = 
    new Dictionary<string, Dictionary<string, int>>();

我想做这样的事情:

myDictionary.Add(variableType.A.ToString(), new Dictionary<string, int>(variableType.A.ToString(), 0));

修复代码的第二部分是个好主意?

标签: c#

解决方案


你可以这样做:

Dictionary<string, Dictionary<string, int>> myDictionary = new Dictionary<string, Dictionary<string, int>>();
var newValues = new Dictionary<string, Dictionary<string, int>> {
    {
        "test",
        new Dictionary<string, int> 
        {
            ["one"] = 1, // C#6, equivalent of doing {"one", 1}
            ["two"] = 2
        }
    }
};

//if you just want to assign.
myDictionary = newValues;
//if you want to add more entries to the dictionary
foreach (var (key, val) in newValues) 
{
    myDictionary.Add(key, val);
}

或者,如果您想创建一个函数:

public Dictionary<string, Dictionary<string, int>> AddValuesToDictionary(string key, Dictionary<string, int> value)
{
    var values = new Dictionary<string, int>();
    foreach ( var (keys, vals) in value)
    {
        values.Add(keys, vals);
    } 
    return new Dictionary<string, Dictionary<string, int>> {
        {
            key,
            values
        }
    };
}

并像这样使用它:

Dictionary<string, Dictionary<string, int>> myDictionary = new Dictionary<string, Dictionary<string, int>>();
var p = new Program();
var newValues = p.AddValuesToDictionary(
    "test", 
    new Dictionary<string, int>()
    {
        ["one"] = 1,
        ["two"] = 2
    }
);
foreach (var (key, val) in newValues)
{
    myDictionary.Add(key, val);
}

使用上述函数的第三种方法:

var myDictionary = new Dictionary<string, Dictionary<string, int>>();
var p = new Program();

var newValues = new List<Dictionary<string, Dictionary<string, int>>>();


newValues.Add(p.AddValuesToDictionary(
    "test",
    new Dictionary<string, int>()
    {
        ["one"] = 1,
        ["two"] = 2
    }
));

newValues.Add(p.AddValuesToDictionary(
    "test2",
    new Dictionary<string, int>()
    {
        ["three"] = 3,
        ["four"] = 4
    }
));

foreach (var entry in newValues)
{
    foreach (var (key, val) in entry)
    {
        myDictionary.Add(key, val);
    }
}

推荐阅读