基于另一个数组中的条件的平均一个数组

时间:2016-02-29 11:39:29

标签: 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.FromOADate(dates[i]).Date()).Average().ToArray();

但这失败了。你能指点我正确的方向吗?

1 个答案:

答案 0 :(得分:2)

您可以选择匿名类型,然后使用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();

使用Enumerable.Zip的另一种类似方法:

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();

后者有一个优点:如果两个阵列不具有相同的大小,它不会抛出异常:"如果输入序列不具有相同数量的元素,则该方法组合元素直到它到达其中一个序列的末尾。例如,如果一个序列有三个元素而另一个序列有四个元素,那么结果序列只有三个元素"