【问题标题】:How to add entries from one Dictionary to another of different types?如何将一个词典中的条目添加到另一个不同类型的词典中?
【发布时间】:2014-12-19 17:05:03
【问题描述】:

我想将整数字典中的所有值作为字符串添加到字符串字典中。这样做的最有效或最有效的方法是什么......有没有更好的方法来编写这段代码?

static void Main()
{
    var dictOfStrings = new Dictionary<string, string>
    {
        {"sky", "blue"},
        {"sun", "orange"},
        {"stop sign", "red"},
        {"iguana", "green"}
    };

    var dictOfNumbers = new Dictionary<int, int>
    {
        {5, 2},
        {7, 1},
        {9, 0},
        {19, -1}
    };

    foreach (var number in dictOfNumbers)
    {
        dictOfStrings.Add(number.Key.ToString(), number.Value.ToString());
    }

    foreach (var item in dictOfStrings)
    {
        Console.WriteLine(item);
    }

    Console.ReadKey();
}

【问题讨论】:

  • 这个问题似乎是题外话,因为它属于Code Review
  • 比 3 行代码更有效率...你可以用 LINQ 来做,但效率是一样的
  • 不,如果你使用linq会更糟,不一样
  • 我会创建一个List&lt;T&gt; 或者我会使用不同的Collection stackoverflow.com/questions/3575029/… 也许Tuple 也可以工作

标签: c# linq list dictionary foreach


【解决方案1】:

你的方法是正确的; LINQ 的效率会低于简单循环。

您可以创建一个扩展方法,将额外的条目添加到您的字典中 注意 - 如果您需要将字符串转换为整数,那么您需要添加一些额外的解析逻辑以避免异常。

// extension method
public static Dictionary<string, string> Combine(this Dictionary<string, string> strs, Dictionary<int, int> ints)
{
    foreach (var i in ints)
    {
        strs.Add(i.Key.ToString(), i.Value.ToString());
    }
    return strs;
}

// usage
strs = strs.Combine(ints);

【讨论】:

    【解决方案2】:

    比简单的循环更有效?我不这么认为,但行数更少(就其价值而言):

    dictOfStrings = dictOfStrings.Select(kv => kv)
      .Concat(dictOfNumbers
      .Select(kv => new KeyValuePair<string, string>(kv.Key.ToString(), kv.Value.ToString())))
      .ToDictionary(kv => kv.Key, kv => kv.Value);
    

    现在我已经写了这个并将它与你的循环进行比较,我将使用它而不是 LINQ。

    【讨论】:

      【解决方案3】:

      这是一个使用 LINQ 的选项,但恕我直言,这个简单的循环看起来更容易让其他开发人员阅读和理解。

      var output = dictOfStrings.Concat(dictOfNumbers.ToDictionary(item => Convert.ToString(item.Key), item => Convert.ToString(item.Value)));
      

      【讨论】:

        猜你喜欢
        • 2014-07-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-11-20
        • 1970-01-01
        • 2018-07-27
        • 1970-01-01
        相关资源
        最近更新 更多