C# 检查二维数组中的任何元素是 NaN 还是 Infinity 的最佳方法

标签 c# multidimensional-array

有谁知道检查二维数组中的元素是否为 NaN 或 Infinity 的最佳方法是什么?我的数组可能很大,所以我不想循环遍历它。我正在考虑使用

double[,] myArray;
if ( !double.IsNaN(myArray.Cast<double>().Min() ) && !double.IsInfinity( myArray.Cast<double>().Min() )
{
    // have finite values as elements
}

用于 NaN 和无穷大检查。我只需要知道数组中是否有任何元素是 NaN 或无穷大,所以我认为只需检查数组中的最小元素就可以解决 NaN 和无穷大的问题。有一个更好的方法吗?感谢您提供的任何帮助或建议。

最佳答案

我个人会使用:

if (!myArray.Cast<double>().Any(d => double.IsNaN(d) || double.IsInfinity(d)))
{
     // All have correct values...

除了更短之外,这应该接近手动编写循环的速度,因为它保持单次通过值,并在达到“坏”值时立即退出(因为 Any( ) 将停止评估失败)。


Since my array can get large, I guess I will write loops to get the better performance/

如果您要处理非常大的数组,一个选择是并行执行此检查:

if (!myArray.Cast<double>().AsParallel()
            .Any(d => double.IsNaN(d) || double.IsInfinity(d)))
{
     // All have correct values...

对于非常大的数组,这通常会比执行直接循环更好,因为多个内核可以通过 PLINQ 处理分区数据。

关于C# 检查二维数组中的任何元素是 NaN 还是 Infinity 的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19800974/

相关文章:

c++ - 动态初始化字符数组

c - 这段C语言代码有什么问题?

c# - 使用 LINQ 连接字符串

c# - 明显的 BufferBlock.Post/Receive/ReceiveAsync race/bug

c# - MVC 5 翻译 IdentityResult

php - CSS 中的多维数组 PHP

c++ - 如何使用 STL 排序函数根据第二列对二维数组进行排序?

c# - Serilog - 日志文件的路径

c# - 如何在 *config 文件中保存键的值

c - C 中的二维数组索引怎么样?