如何将一个词典中的条目添加到另一个不同类型的词典?

时间:2014-10-23 21:53:00

标签: c# linq list dictionary foreach

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

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

3 个答案:

答案 0 :(得分:1)

比简单的循环效率更高?我不这么认为,但是线条较少(价值很高):

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。

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

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

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

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