C#可以用if(xx[I]!=double.NaN)来判断数组中是否存在NaN吗
时间: 2023-06-20 09:07:20 浏览: 60
不可以。在C#中,NaN是一个特殊的值,它不等于任何值,包括它自己。因此,使用“!=”运算符来比较一个值是否等于NaN将始终返回true,即使值本身是NaN。相反,应该使用double.IsNaN(xx[I])方法来检查数组中的值是否为NaN。例如:
```
if (double.IsNaN(xx[I]))
{
// 数组中的值是NaN
}
else
{
// 数组中的值不是NaN
}
```
相关问题
在C#中 double[] Samples = lstReportsDis.Select(f => f.TestValue).ToArray();将该数组,每十个为一组,分成若干数组,然后对每一个数组进行如下求值lstReportsCPK.Where(f => !f.TestValue.Equals(double.NaN)).Average(f => f.TestValue);再将所有求得的所有结果进行求平均
您好,您可以使用 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`;
- 在当前子数组中。
最后,我们对筛选出的元素求平均值,得到这个子数组的平均值。
C#中 ,R3 = BLOB.Count(x => x != 0);R4 = BLOB1.Count(x => x != 0);需要用到的指令集
这两行代码用到了 C# 中的 Lambda 表达式和 LINQ 扩展方法。
Lambda 表达式是一种匿名函数,可以用来简化代码和提高可读性。在这里,`x => x != 0` 表示一个输入为 x 的函数,它的返回值是一个布尔值,当 x 不等于 0 时返回 true,否则返回 false。
LINQ 是一种语言集成查询的技术,可以用来对各种数据源进行筛选、排序、分组等操作。在这里,我们使用了 LINQ 扩展方法 `Count`,它用来计算序列中满足指定条件的元素个数。具体来说,`BLOB.Count(x => x != 0)` 表示计算 BLOB 数组中满足 x 不等于 0 的元素个数。
需要注意的是,使用 LINQ 扩展方法需要添加命名空间 `System.Linq`。因此,你需要在代码的开头添加如下语句:
```
using System.Linq;
```