Array.indexOf的奇怪结果

Sak*_*ket 4 scala

以下代码-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)

Tra*_*own 8

indexWhere就像indexOf但是允许你提供自己的谓词(这是必要的Double.NaN != Double.NaN):

scala> values.indexWhere(_.isNaN)
res0: Int = 3
Run Code Online (Sandbox Code Playgroud)

这将比您的解决方案更有效,并且如果没有任何元素,则不会抛出异常NaN.


aio*_*obe 5

这是因为Double.NaN != Double.NaN.

您可以使用indexWhere(p: (T) ? Boolean): Int如下:

val index = values.indexWhere(_.isNaN)
Run Code Online (Sandbox Code Playgroud)