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