C# 根据另一个数组中的条件对一个数组求平均值

C# 根据另一个数组中的条件对一个数组求平均值,c#,C#,我试图根据另一个数组中的条件对一个数组求平均值 //array with a number of dates including hourly data double[] dates; //array with values, same length as dates and corresponding data points double[] vals; 这就是我想做的: double[] dailyavgs = vals.GroupBy((v, i) => DateTime.From

我试图根据另一个数组中的条件对一个数组求平均值

//array with a number of dates including hourly data
double[] dates;
//array with values, same length as dates and corresponding data points
double[] vals;
这就是我想做的:

double[] dailyavgs = vals.GroupBy((v, i) => DateTime.FromOADate(dates[i]).Date()).Average().ToArray();

但这失败了。您能给我指一下正确的方向吗?

您可以选择一个匿名类型,然后使用
GroupBy

double[] dailyavgs = vals
    .Select((v, i) => new { Date = DateTime.FromOADate(dates[i]).Date, Value = v })
    .GroupBy(x => x.Date)
    .Select(g => g.Average(x => x.Value))
    .ToArray();
另一种类似的方法是:

后者有一个优点:如果两个数组的大小不相同,则不会引发异常:“如果输入序列的元素数不相同,则该方法将组合元素,直到到达其中一个序列的末尾。例如,如果一个序列有三个元素,而另一个序列有四个元素,则结果序列只有三个元素“

将这两个集合放在一起,然后分组并平均。
double[] dailyavgs = vals
    .Zip(dates, (v, d) => new { Date = DateTime.FromOADate(d).Date, Value = v })
    .GroupBy(x => x.Date)
    .Select(g => g.Average(x => x.Value))
    .ToArray();