C# 使用GroupBy平均整数数组元素
我有这样一个项目列表: 其中列表中的每个元素都遵循相同的结构。每个C# 使用GroupBy平均整数数组元素,c#,linq,C#,Linq,我有这样一个项目列表: 其中列表中的每个元素都遵循相同的结构。每个Y属性都是一个具有3个值的int[] 然后我在此列表上执行一个GroupBy,将数据分成60秒的时段: var newChart = chart.GroupBy(x => x.DateAdded.RoundUp(TimeSpan.FromSeconds(60))); RoundUp是我从这里得到的一种扩展方法: 这将创建一个类似这样的列表,其中的值按分钟分组,这是我所期望的: 例如,分钟20:18有5个条目,该值可能会
Y
属性都是一个具有3个值的int[]
然后我在此列表上执行一个GroupBy
,将数据分成60秒的时段:
var newChart = chart.GroupBy(x => x.DateAdded.RoundUp(TimeSpan.FromSeconds(60)));
RoundUp
是我从这里得到的一种扩展方法:
这将创建一个类似这样的列表,其中的值按分钟分组,这是我所期望的:
例如,分钟20:18
有5个条目,该值可能会改变,有时可能是6个条目,有时是1个条目,以此类推
因此,我的问题是,如何将这个新的分组依据列表转换为原始列表的类型,其中Y
值具有分组依据中这些条目的平均值。我尝试了以下操作,但Y
值包含3个以上的条目:
var newChart = chart.GroupBy(x => x.DateAdded.RoundUp(TimeSpan.FromSeconds(60)))
.Select(x => new ChartPoint
{
DateAdded = x.Key,
X = x.Key.ToString(@"HH:mm:ss"),
Y = x.Select(y => (int)Math.Round(y.Y.Average(z => z), 0, MidpointRounding.AwayFromZero)).ToArray()
});
例如,如果位于
20:18
的条目只有2个条目,条目1的Y值为:3,4,5
,条目2的值为:5,10,11
。然后,我希望这个新列表中Y
的20:18
条目如下:4,7,8
,因为:(3+5)/2=4
,(4+10)/2=7
,(5+11)/2=8
,而不是获取组中每个数组的平均值,设置数组长度的范围,并从每个数组中获取相应项的平均值:
var newChart = chart.GroupBy(x => x.DateAdded.RoundUp(TimeSpan.FromSeconds(60)))
.Select(x => new ChartPoint
{
DateAdded = x.Key,
X = x.Key.ToString(@"HH:mm:ss"),
Y = Enumerable.Range(0, 3).Select(i => (int)Math.Round(x.Average(z => z.Y[i]))).ToArray()
});