Array.indexOf的奇怪结果

时间:2015-02-19 12:54:18

标签: scala

以下代码为索引生成-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")

2 个答案:

答案 0 :(得分:8)

indexWhereindexOf类似,但允许您提供自己的谓词(自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)