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

Arrays 对数组数组应用filter函数将返回Scala中的异常,arrays,scala,multidimensional-array,filter,Arrays,Scala,Multidimensional Array,Filter,我正在学习Scala,并尝试在数组上练习一些示例。下面是一个例子: 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)) 当我尝试以相同的方式在上述数组上执行过滤器方法时,它导致了一个错误。下面是一段代码和由此产生的错误 scala

我正在学习Scala,并尝试在
数组上练习一些示例。下面是一个例子:

  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))
当我尝试以相同的方式在上述数组上执行
过滤器
方法时,它导致了一个
错误
。下面是一段代码和由此产生的
错误

   scala>arr.filter(_.filter(_ < 5))
   <console>:15: error: type mismatch;
   found   : Array[Int]
   required: Boolean
   o.filter(_.filter(_ < 5))
                    ^
scala>arr.filter(u.filter(<5))
:15:错误:类型不匹配;
找到:数组[Int]
必填项:布尔值
o、 过滤器(0.filter(0<5))
^

请说明为什么
filter
操作不起作用在数组上使用
filter
方法的正确方法是什么

如果目标是获得
数组(数组(1,2,3),数组(4))
,那么

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

查看过滤器的签名:

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

Filter方法接受一个。您可以映射内部数组,然后根据规则进行过滤。

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


关于您的示例,为了解释失败的原因,filter需要一个返回类型为
Boolean
的函数作为参数。在内部过滤器中,您可以正确使用
\u5
,该过滤器扩展为
(x:Int)=>x<5
,这是一个返回
true
false
的函数。但是在外部过滤器上,您使用了
.filter(
),它扩展为
(y:Array[Int])=>y.filter((x:Int)=>x<5)
。问题是,
y.filter((x:Int)=>x<5)
将返回一个新数组,这意味着函数的返回类型不是
Boolean
,而是
Array[Int]

使用
Array
也是一种不好的做法,初学者应该避免。在可变变量(
var
)中存储可变集合(
Array
)是一种错误的做法。