【问题标题】:Apply boolean mask to Scala array将布尔掩码应用于 Scala 数组
【发布时间】: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 中实现这一点?

【问题讨论】:

    标签: arrays scala bitmask


    【解决方案1】:
    scala> arr.zip(mask).collect { case (v, true) => v }
    res0: Seq[String] = List(A, C)
    

    【讨论】:

    • 酷!刚刚了解到偏函数是映射和过滤器的组合,即所有不是偏函数的有效参数的值都将被忽略。
    • @Samar 这不是一个偏函数,它是mapfilter 的组合。它是collect,它专门定义为忽略未定义其参数的元素。在这种情况下,接受部分函数的其他方法可以做其他事情。
    • @AlexeyRomanov:来自收集的文档:def collect[B](pf: PartialFunction[A, B]): Array[B]collect 接受部分函数,​​这就是我的意思。
    • 哦,好吧,我明白你的意思了。 Collect 专门设计用于忽略提供的部分函数的不适用参数。
    猜你喜欢
    • 2021-07-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-02
    • 2021-07-15
    • 2020-02-14
    • 2012-07-17
    • 2020-11-19
    • 2021-03-09
    相关资源
    最近更新 更多