在C#中 double[] Samples = lstReportsDis.Select(f => f.TestValue).ToArray();将该数组,每十个为一组,分成若干数组,然后对每一个数组进行如下求值lstReportsCPK.Where(f => !f.TestValue.Equals(double.NaN)).Average(f => f.TestValue);再将所有求得的所有结果进行求平均
时间: 2024-02-26 21:57:01 浏览: 110
您好,您可以使用 LINQ 的扩展方法 `Batch` 将一个数组分成若干个固定大小的子数组,然后再对每个子数组求平均值,最后再对所有平均值求平均值。具体实现代码如下:
```csharp
double[] Samples = lstReportsDis.Select(f => f.TestValue).ToArray();
// 将 Samples 数组分成若干个大小为 10 的子数组
var subArrays = Samples.Batch(10);
// 对每个子数组求平均值
var averages = subArrays.Select(subArray => lstReportsCPK
.Where(f => !f.TestValue.Equals(double.NaN) && subArray.Contains(f.TestValue))
.Average(f => f.TestValue));
// 对所有平均值求平均值
double result = averages.Average();
```
需要注意的是,在对每个子数组求平均值时,我们使用了 `lstReportsCPK.Where(f => !f.TestValue.Equals(double.NaN) && subArray.Contains(f.TestValue))` 这个 LINQ 查询,它会筛选出 `lstReportsCPK` 列表中符合以下两个条件的元素:
- `TestValue` 不等于 `double.NaN`;
- 在当前子数组中。
最后,我们对筛选出的元素求平均值,得到这个子数组的平均值。
阅读全文