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

本文关键字:Dictionary 对象 添加 另一个 一个 | 更新日期: 2023-09-27 18:10:43

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

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。请注意,字典有不同的签名。

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

这只有在两个签名相同的情况下才有可能。所以你应该恢复到objectstring

只需循环其中一个字典(最好是string,int字典),并将值添加到另一个字典中,转换其值。

您可以使用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>

如果您的值可以有不同的类型,您可以创建类型为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);

不能将一个字典添加到另一个字典中,因为它包含不同类型的键值对。

但是,如果您决定要保存的键和值对的类型,则可以将一个字典转换为另一个字典,并将一个字典添加到另一个字典中。

例如,我们有一个名为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());
}