【发布时间】:2016-09-15 14:48:58
【问题描述】:
我正在尝试使用一个布尔数组来选择另一个数组中的特定元素。例如:
val arr = Seq("A", "B", "C")
val mask = Seq(true,false,true)
我希望输出是一个新数组:
val arr_new = Seq("A","C")
有没有办法在 Scala 中实现这一点?
【问题讨论】:
我正在尝试使用一个布尔数组来选择另一个数组中的特定元素。例如:
val arr = Seq("A", "B", "C")
val mask = Seq(true,false,true)
我希望输出是一个新数组:
val arr_new = Seq("A","C")
有没有办法在 Scala 中实现这一点?
【问题讨论】:
scala> arr.zip(mask).collect { case (v, true) => v }
res0: Seq[String] = List(A, C)
【讨论】:
map 和filter 的组合。它是collect,它专门定义为忽略未定义其参数的元素。在这种情况下,接受部分函数的其他方法可以做其他事情。
def collect[B](pf: PartialFunction[A, B]): Array[B]collect 接受部分函数,这就是我的意思。