gpt4 book ai didi

c# - 计算具有相同项目数的多个 IEnumerable 的平均值

转载 作者:行者123 更新时间:2023-11-30 14:21:48 26 4
gpt4 key购买 nike

假设我们有多个相同项目计数的 IEnumerable

var multipleEnumerables = new[]
{
new[] { 10, 20, 30 }
new[] { 11, 21, 31 }
new[] { 12, 22, 32 }
new[] { 13, 23, 33 }
}

我怎样才能得到那些使用 LINQ 的平均值,这将产生以下结果:

new[] { 11.5, 21.5, 31.5 }

可枚举的数量可能会有所不同(即不固定为四个)。

每个可枚举项中的项数可能会有所不同(即不固定为三个),但对于该特定实例的所有可枚举项都是相同的。

最佳答案

更新响应编辑

如果你有IEnumerable<IEnumerable<Item>>你可以使用这样的东西:

IEnumerable<IEnumerable<Test>> multipleEnumerables = new[] {
new [] { new Test { Value = 10 }, new Test { Value = 20 } },
new [] { new Test { Value = 11 }, new Test { Value = 21 } }
};

var averages = multipleEnumerables
.SelectMany(e => e.Select((v, i) => new { Index = i, Item = v }))
.GroupBy(e => e.Index)
.Select(e => e.Select(v => v.Item.Value).Average())
.ToArray();

如果你有一个简单的 IEnumerable<IEnumerable<int>> , 更改 .Select行至:.Select(e => e.Select(v => v.Item).Average()) (但根据您的评论,我认为情况并非如此)。

  1. 使用 .SelectMany 将列表展平为包含项目及其子数组索引的对象(因此 10 和 11 将有 Index 0,等等)。
  2. 按索引分组。
  3. 使用 .Select 从每个分组中选择平均值。

Try it online

Try it online with question data

原始答案

您可以使用 .Zip 合并两个列表并计算平均值:

var averages = items1
.Zip(items2, (a, b) => (a+b)/2.0)
.ToArray();

Try it online

关于c# - 计算具有相同项目数的多个 IEnumerable 的平均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52845740/

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