代码之家  ›  专栏  ›  技术社区  ›  Sarvagya Dubey

对数组数组应用filter函数将返回Scala中的异常

  •  2
  • Sarvagya Dubey  · 技术社区  · 7 年前

    我正在学习Scala,并尝试在计算机上练习一些例子 Arrays . 以下是示例:

      scala>var arr = Array(Array(1,2,3), Array(4,5,6));
    
      scala>arr.map(_.map(_ * 5))
      res42: Array[Array[Int]] = Array(Array(5,10,15),Array(20,25,30))
    

    filter 方法以同样的方式对上述数组进行处理,结果是 error . 下面是一段代码及其结果 错误

       scala>arr.filter(_.filter(_ < 5))
       <console>:15: error: type mismatch;
       found   : Array[Int]
       required: Boolean
       o.filter(_.filter(_ < 5))
                        ^
    

    滤波器 数组上的方法?

    3 回复  |  直到 7 年前
        1
  •  2
  •   Mario Galic    7 年前

    如果目标是 Array(Array(1,2,3), Array(4)) ,那么

    arr.map(_.filter(_ < 5))
    

    如果目标是 Array(1,2,3,4) ,那么

    arr.flatten.filter(_ < 5)
    
        2
  •  2
  •   Thrasos Thrasyvoulou    7 年前

    首先,如果你对Scala感兴趣,你应该读一本好书。使用vars是一个非常糟糕的做法,初学者应该避免。

    关于您的示例,为了解释失败的原因,filter需要一个返回类型为的函数作为参数 Boolean _ < 5 扩展到 (x: Int) => x < 5 true false . 但在你用的外部过滤器上 _.filter(_ < 5) (y: Array[Int]) => y.filter((x: Int) => x < 5) . 问题是, y.filter((x: Int) => x < 5) 布尔值 ,但属于 Array[Int]

        3
  •  1
  •   mkUltra    7 年前

    看看过滤器的签名:

    def filter(p: A => Boolean): Repr = filterImpl(p, isFlipped = false)
    

    筛选器方法接受 Predicate