C# 获取嵌套字典中的值之和
我的字典结构如下:C# 获取嵌套字典中的值之和,c#,linq,C#,Linq,我的字典结构如下: Dictionary<string, Dictionary<int, double>> temp = new Dictionary<string, Dictionary<int, double>>(); 字典温度= 新字典(); 我想用LINQ计算temp中所有双精度值的总和。我试图获取字典列表list res=temp.Values.Sel
Dictionary<string, Dictionary<int, double>> temp =
new Dictionary<string, Dictionary<int, double>>();
字典温度=
新字典();
我想用LINQ计算
temp
中所有双精度值的总和。我试图获取字典列表list res=temp.Values.Select(s=>s.ToList()代码>但不知道如何继续进行此操作。无需展平-您只需从内部字典获取值的总和:
var total = temp.Values.Sum(d => d.Values.Sum());
无需展平-您只需从内部字典获取值之和:
var total = temp.Values.Sum(d => d.Values.Sum());
可以使用SelectMany展平嵌套列表
temp.Values.SelectMany(dict=>dict.Values.ToList()).Sum()您可以使用SelectMany展平嵌套列表
temp.Values.SelectMany(dict=>dict.Values.ToList()).Sum()同意,这看起来比我的构造更好。太棒了!你跑得很快。@Sergey还有,我想做的是var total=temp.Values.Select(d=>d.Values.Sum())
你能告诉我为什么这不能给我预期的结果吗?@raksmens你把外部字典(即每个内部字典)的每个值都投影到内部字典值的总和(即双倍值)。这种投影的结果是内部和的IEnumerable
-序列。你错过了这个序列的总和。您可以将.Sum()
添加到查询的末尾,并获得相同的结果gree,这看起来比我的构造更好。太好了!你跑得很快。@Sergey还有,我想做的是var total=temp.Values.Select(d=>d.Values.Sum())
你能告诉我为什么这不能给我预期的结果吗?@raksmens你把外部字典(即每个内部字典)的每个值都投影到内部字典值的总和(即双倍值)。这种投影的结果是内部和的IEnumerable
-序列。你错过了这个序列的总和。您可以将.Sum()
添加到查询的末尾,并获得相同的结果如何:var results=temp.Select(x=>new{key=x.key,Sum=x.Value.Select(y=>y.Value.Sum())).ToList();这个怎么样:var results=temp.Select(x=>new{key=x.key,sum=x.Value.Select(y=>y.Value.sum())).ToList();