我想将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();
}
答案 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);