以下代码-1为index 生成一个值.这是为什么?
val values = Array(1.0, 2.0, 3.0, Double.NaN, 4.0)
val index = values.indexOf(Double.NaN)
println(s"index = $index")
Run Code Online (Sandbox Code Playgroud)
在这种情况下找到NaN指数的最佳方法是什么?我有以下解决方案,但不认为这是最优雅的解决方案.
val index2 = values.zipWithIndex.find(_._1.isNaN).get._2
println(s"index2 = $index2")
Run Code Online (Sandbox Code Playgroud)
indexWhere就像indexOf但是允许你提供自己的谓词(这是必要的Double.NaN != Double.NaN):
scala> values.indexWhere(_.isNaN)
res0: Int = 3
Run Code Online (Sandbox Code Playgroud)
这将比您的解决方案更有效,并且如果没有任何元素,则不会抛出异常NaN.
这是因为Double.NaN != Double.NaN.
您可以使用indexWhere(p: (T) ? Boolean): Int如下:
val index = values.indexWhere(_.isNaN)
Run Code Online (Sandbox Code Playgroud)