将布尔掩码应用于Scala数组

Fey*_*n27 0 arrays scala bitmask

我正在尝试使用布尔数组来选择另一个数组中的特定元素.例如:

val arr = Seq("A", "B", "C")
val mask = Seq(true,false,true)
Run Code Online (Sandbox Code Playgroud)

我希望输出成为一个新数组:

val arr_new = Seq("A","C")
Run Code Online (Sandbox Code Playgroud)

有没有办法在Scala中实现这一目标?

Tza*_*har 8

scala> arr.zip(mask).collect { case (v, true) => v }
res0: Seq[String] = List(A, C)
Run Code Online (Sandbox Code Playgroud)

  • @Samar它不是一个部分功能,它是`map`和`filter`的组合.它是`collect`,它专门定义为忽略其参数未定义的元素.在这种情况下,接受部分函数的其他方法可以做其他事情. (2认同)