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

另一种类似的方法使用 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();

后者有一个优点:如果两个数组的大小不同,它不会引发异常:"如果输入序列的元素数量不同,该方法将组合元素,直到满足以下条件:到达其中一个序列的末尾。例如,如果一个序列有 3 个元素,另一个序列有 4 个元素,则结果序列只有 3 个元素"

关于c# - 根据另一个数组中的条件对一个数组求平均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35698590/

相关文章:

c# - 找不到方法 'Void Newtonsoft.Json.Serialization.DefaultContractResolver.set_IgnoreSerializableAttribute(Boolean)

c# - 来自 PowerBuilder 的 DLL 调用

c# - 为通用参数指定构造函数约束

c# - 检查 block blob 是否存在失败

c# - 应用程序设置中的自定义类型

c# - 区域性更改后如何在十进制 ToString 处保留 "."

c# - 在 C# 中访问 PowerPoint 图表

c# - ASP.NET Core - 将 IEnumerable<T> 绑定(bind)到 POST 上的 ViewModel 字段

c# - MDI 窗体不能改变光标

c# - 时区的日期时间