【发布时间】:2011-08-11 20:20:54
【问题描述】:
所以我有一个有点奇怪的场景,我无法转过头来:
我有一个包含多个内部列表的外部列表。
每个内部列表包含多个 DataPoint 对象。
每个内部列表都包含相同数量的 DataPoint 对象。
数据点有一个名为 Value 的字段,它是一个双精度字段 - 例如:
- 外部名单
- 内部清单
- 数据点(值=2)
- 数据点(值=2)
- 内部清单
- 数据点(值=4)
- 数据点(值=5)
- 内部清单
- 数据点(值=3)
- 数据点(值=5)
- 内部清单
所以我想做的是将内部列表“组合”成一个列表,其中每个 DataPoint 的值应该是旧值的平均值,基于它在列表中的索引 - 在这种情况下:
- 列表
- 数据点(3) - ((2+4+3)/3) = 3
- 数据点(4) - ((2+5+5)/3) = 4
是否有任何简洁的 linq 表达式可以执行此类操作(我打赌有:))?
我最终使用了以下解决方案:
var averages = Enumerable.Range(0, outer.First().Count()).Select(i => new DataPoint(outer.Select(l => l[i]).Average(x=>x .值)));
它输出 IEnumerable,现在具有平均值 - 耶!
【问题讨论】:
-
如果你有最新版本的 resharper,值得输入 for 循环,看看它是否建议基于 linq 的重构。好吧,我是在开玩笑,但它可能真的有效。
-
哈哈,Resharper 很好,但我怀疑它有那么好。 :) 不过,我认为无论如何你都必须执行 for 循环。 LINQ 通常最适合与位置无关的操作。
-
你可能想看看这个问题:stackoverflow.com/questions/6669121/…
-
如果我正确理解了您的问题,您将不会在 linq 中沿枢轴线做任何事情。可能对这个问题感兴趣:Pivot data using LINQ.