gpt4 book ai didi

.net - LINQ - 根据列表中的索引返回平均值列表

转载 作者:行者123 更新时间:2023-12-01 11:04:45 25 4
gpt4 key购买 nike

所以我有一个有点奇怪的场景,我无法理解:

我有一个外部列表,其中包含多个内部列表。
每个内部列表包含多个数据点对象。
每个内部列表包含相同数量的数据点对象。
数据点有一个名为 Value 的字段,它是 double 的 - 例如:

  • 外部列表
    • 内部列表
      • 数据点(值=2)
      • 数据点(值=2)
    • 内部列表
      • 数据点(值=4)
      • 数据点(值=5)
    • 内部列表
      • 数据点(值=3)
      • 数据点(值=5)

所以我想做的是将内部列表“组合”成一个列表,其中每个数据点的值应该是旧值的平均值,基于它在列表中的索引 - 在这种情况下:

  • 列表
    • 数据点(3) - ((2+4+3)/3) = 3
    • 数据点(4) - ((2+5+5)/3) = 4

是否有任何整洁的 linq 表达式可以执行此类操作(我打赌有 :))?


我最终使用了以下解决方案:

var 平均值 = Enumerable.Range(0, outer.First().Count()).Select(i => new DataPoint(outer.Select(l => l[i]).Average(x=>x .值)));

它输出 IEnumerable,现在有平均值 - 耶!

最佳答案

从一个扩展方法开始,获取内部列表的一部分:

public static IEnumerable<double> Slice(
this IEnumerable<List<DataPoint>> innerLists,
int index) {
foreach(var innerList in innerLists) {
yield return innerList.DataPoints[index].Value;
}
}
}

然后:

var averages = Enumerable.Range(0, count)
.Select(index => outerList.InnerLists.Slice(index))
.Select(slice => slice.Average());

我假设这样的层次结构:

class DataPoint { public double Value { get; set; } }

class InnerList { public List<DataPoint> DataPoints { get; set; } }

class OuterList { public IEnumerable<InnerList> InnerLists { get; set; } }

但上述想法显然适用于您构建数据的方式。

关于.net - LINQ - 根据列表中的索引返回平均值列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7032312/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com