【问题标题】:Adding one Dictionary object to another将一个 Dictionary 对象添加到另一个
【发布时间】:2014-06-30 08:35:25
【问题描述】:

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

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

【问题讨论】:

  • 你的最终目标是什么?需要合并吗?
  • 你真正想做什么?对您的字典执行此操作会使尝试检索值变得非常痛苦
  • d2 已经包含{"def", "2"} 时会发生什么?

标签: c# generics dictionary


【解决方案1】:

这只有在您制作相同的签名时才有可能。因此,您应该恢复为objectstring

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

【讨论】:

    【解决方案2】:

    您可以使用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&lt;string, string&gt;

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        【解决方案4】:

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

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

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

        【讨论】:

        • 但是你可以转换值。
        • 这是肯定的。我会相应地更新我的帖子。
        猜你喜欢
        • 2021-07-14
        • 2017-01-16
        • 2021-12-10
        • 1970-01-01
        • 2017-01-19
        • 2022-11-26
        • 2017-05-07
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多