以下代码为索引生成-1
的值。那是为什么?
val values = Array(1.0, 2.0, 3.0, Double.NaN, 4.0)
val index = values.indexOf(Double.NaN)
println(s"index = $index")
在这种情况下,找到NaN索引的最佳方法是什么?我有以下解决方案,但不要认为这是最优雅的解决方案。
val index2 = values.zipWithIndex.find(_._1.isNaN).get._2
println(s"index2 = $index2")
答案 0 :(得分:8)
indexWhere
与indexOf
类似,但允许您提供自己的谓词(自Double.NaN != Double.NaN
以来这里必须提供):
scala> values.indexWhere(_.isNaN)
res0: Int = 3
这将比您的解决方案更有效,并且如果没有任何元素是NaN
,则不会抛出异常。
答案 1 :(得分:5)
这是因为Double.NaN != Double.NaN
。
您可以按如下方式使用indexWhere(p: (T) ⇒ Boolean): Int
:
val index = values.indexWhere(_.isNaN)