【发布时间】:2021-09-20 19:35:52
【问题描述】:
我有一个在某些键之间映射的字典
var map = new Dictionary<string, string>(){ {"A", "One"}, {"B", "One"}, {"C", "Two"} };
我还有一本包含值的字典
var values = new Dictionary<string, double>() { {"A", 2.0}, {"B", 1.0}, {"C", 1.0} };
我想将这些值映射到第三个字典中,以便 map 的值是新字典的键。 IE。我希望新字典是
var result = new Dictionary<string, double>() {{"One", 3.0}, {"Two", 1.0}};
这当然可以使用这样的循环来实现
var result = new Dictionary<string, double>();
foreach (var kv in values)
{
var key = map[kv.Key];
var value = kv.Value;
if (result.TryGetValue(key, out var temp))
result[key] = value + temp;
else
result.Add(key, value);
}
或者类似的东西......
但是是否可以使用 linq 在单行中做到这一点?
【问题讨论】:
-
为什么需要一行中的linq?在此之后的任何情况下,编译器都会将其转换为一组 for each 循环,这些循环有时可能很难看。最好为每个循环自己制作,特别是如果代码很关键。
-
好吧,我不需要一行中的 linq。我正在尝试在编写代码时学习一些 linq,而这个问题是我无法弄清楚的。我当前的代码是您建议的使用 for 循环的函数。
-
它工作正常吗?
-
我相信它是......我想我知道你要问这个问题了:)
-
是的,你是对的。最好的人是善的敌人。有瑕疵的钻石好过没有瑕疵的鹅卵石。
标签: c# linq dictionary