当前位置: 首页 > 面试题库 >

Scala替换Arrays.binarySearch?

谷梁涵忍
2023-03-14
问题内容

Scala中有Java的替代品int Arrays.binarySearch(Object[] array, object)吗?

问题是Scala的数组不是协变的,所以我必须stringArray: Array[String]首先像这样转换我的:

stringArray.asInstanceOf[Array[Object]]

有更好的解决方案吗?


问题答案:

据我所知,没有内置任何东西,但是您可以使用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

您也可以将其他java.util.Arrays对象方法添加到同一类中。

总的来说,我发现习惯于始终导入自己喜欢的Scala实用工具的集合是一个好主意。添加这样的功能是如此容易,以至于您一般也可以这样做而不是继续键入.asInstanceOf[Array[AnyRef]],并且只需付出一点点努力就可以使自己的工作效率大大提高。



 类似资料:
  • 使用ScalaTest,我想替换测试用例中的函数实现。我的用例: 我想写一个单元测试,但我不希望此测试用例依赖于测试运行的实际年份。 在动态语言中,我经常使用一个可以替换函数实现以返回固定值的构造。 我希望我的测试用例更改始终返回2014,无论实际年份是什么。 我发现了几个模拟库(Mockito、ScalaMock等等),但它们都只能创建新的模拟对象。它们似乎都无法取代方法的实现。 有办法做到吗?

  • 这里我想要的是将特定列中的值替换为null,如果它是空字符串。 原因是我使用的是以基于另一列填充数据帧的一列,但我注意到在某些行中,值是而不是,因此函数无法按预期工作。 在上面的例子中,我希望首先用列填充,如果它不为空,如果它为空,则用列等等。但是由于某个时候,列被而不是null填充,我在'resolved_id'中得到了。 我试过用 但基于留档,只有当键和值都是或或时才有效,所以我不能在这里使用

  • 我正在尝试连接两个apache spark sql DataFrame,并将第一个数据帧的列值替换为另一个。如: 我需要执行左连接并将 DF1.col1 的值替换为 DF2.col3,其中 DF1.col1 = DF2.col1。我不知道该怎么做。此外,如上例所示,DF1 除了“col1”和“col2”之外还有更多列,我无法对所有列都应用 select。我正在尝试类似的东西, 但这似乎行不通。另外

  • Git 对象是不可改变的,但它提供一种有趣的方式来用其他对象假装替换数据库中的 Git 对象。 replace 命令可以让你在 Git 中指定一个对象并可以声称“每次你遇到这个 Git 对象时,假装它是其他的东西”。 在你用一个不同的提交替换历史中的一个提交时,这会非常有用。 例如,你有一个大型的代码历史并想把自己的仓库分成一个短的历史和一个更大更长久的历史,短历史供新的开发者使用,后者给喜欢数据

  • 我正在使用一些非常古老的。 我试图通过删除非字母字符(标点符号和数字等)来净化一些输入 通常我会做这样的事情: 然而,是在中引入的!所以它不会编译!http://docs.oracle.com/javase/7/docs/api/java/lang/string.html#ReplaceAll(java.lang.string,java.lang.string) 在之前,我们是如何做到这一点的?

  • Parameter Position参数位置 Type参数类型 Required必需 Default默认 Description 1 string Yes n/a This is the string of text to be replaced. 将被替换的文本字串 2 string Yes n/a This is the string of text to replace with. 用来替换