将一个Dictionary对象添加到另一个

时间:2014-06-30 08:35:26

标签: c# generics dictionary

是否可以将一个字典添加到另一个字典中,例如:

Dictionary<string,int> d1=new Dictionary<string,int>()
{
   {"abc",1}
   {"def",2}
};

Dictionary<string,string> d2=new Dictionary<string,string>()
{
   {"str","fgh"}
   {"uyz","ghi"}
};

我需要将d1添加到d2。请注意,词典有不同的签名。

4 个答案:

答案 0 :(得分:1)

只有同时签名时才有可能。因此,您应该恢复为objectstring

只需遍历其中一个词典(最好是string,int一个词典),然后将值添加到另一个词典中,转换其值。

答案 1 :(得分:1)

您可以使用Concat + ToDictionary

var newPairs = d1
    .Where(kv1 => !d2.ContainsKey(kv1.Key))
    .Select(kv1 => new KeyValuePair<string, string>(kv1.Key, kv1.Value.ToString()));
d2 = d2.Concat(newPairs).ToDictionary(kv => kv.Key, kv => kv.Value);

Where首先检查第二个字典是否已包含第一个字典中的给定键。 Select会将值转换为string并创建KeyValuePair<string, string>

答案 2 :(得分:0)

如果您的值可以有不同的类型,则可以创建第DIctionary<String, Object>类型的第三个字典,并将字典中的所有项目添加到其中。

Dictionary<string,int> d1=new Dictionary<string,int>()    
{    
      {"abc",1}    
      {"def",2}    
};

Dictionary<string,string> d2=new Dictionary<string,string>()    
{    
      {"str","fgh"}    
      {"uyz","ghi"}    
};

Dictionary<String, Object> combinedDict = new Dictionary<String, Object>();

foreach(var d1Item in d1)
    combinedDict.Add(d1Item.Key, d1Item.Value);

foreach(var d2Item in d2)
    combinedDict.Add(d2Item.Key, d2Item.Value);

答案 3 :(得分:0)

您无法将字典添加到另一个字典中,该字典包含不同类型的键值对。

但是,如果你决定使用哪个键和值对的类型,那么你可以将一个转换为另一个并将一个字典添加到另一个。

例如,让我们有一个名为dictionaryA的词典:

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

和另一个名为dictionaryB的词典:

Dictionary<string, string> dictionaryB = new Dictionary<string, string>();

还要我们要将dictionaryA添加到dictionaryB并创建一个字典,它将相应地保存类型stringstring的键值对。然后你可以尝试这样的事情:

foreach(var key in dictionaryA)
{
    // Check if the key is not contained in the keys collection of dictionaryB.
    // If so, add the corresponding element of the dictionaryA to the dictionaryB. 
    if(!dictionaryB.Keys.Contains(key))
        dictionaryB.Add(key, dictionaryA[key].ToString());
}