soc*_*soc 27 java search programming-languages scala
Scala for Java是否有替代品int Arrays.binarySearch(Object[] array, object)?
问题是Scala的Arrays不是协变的,所以我必须stringArray: Array[String]先把我这样的:
stringArray.asInstanceOf[Array[Object]]
Run Code Online (Sandbox Code Playgroud)
有更好的解决方案吗?
Joe*_*las 43
Scala 2.11添加scala.collection.Searching到标准库中.它使用二进制搜索索引序列,否则使用线性搜索.
import scala.collection.Searching._
Array(1, 2, 3, 4, 5).search(3)
Run Code Online (Sandbox Code Playgroud)
Rex*_*err 19
据我所知,没有内置任何东西,但你可以使用pimp-my-library模式来相当容易地实现这一点.像这样:
class ObjectArrayTools[T <: AnyRef](a: Array[T]) {
def binarySearch(key: T) = {
java.util.Arrays.binarySearch(a.asInstanceOf[Array[AnyRef]],key)
}
}
implicit def anyrefarray_tools[T <: AnyRef](a: Array[T]) = new ObjectArrayTools(a)
scala> Array("a","fish","is","some","thing").binarySearch("some")
res26: Int = 3
scala> Array("a","fish","is","some","thing").binarySearch("bye")
res28: Int = -2
Run Code Online (Sandbox Code Playgroud)
如果需要,可以将其他java.util.Arrays对象方法添加到同一个类中.
一般来说,我觉得习惯于总是导入你最喜欢的Scala实用程序的集合是个好主意.添加这样的功能非常容易,你可以这样做,而不是继续打字.asInstanceOf[Array[AnyRef]],只需稍加努力就可以让自己显着提高工作效率.