Arrays 对数组数组应用filter函数将返回Scala中的异常
我正在学习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>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
)是一种错误的做法。