我有一个 type 数组String
,看起来像:
[[""],["lorem ipsum", "foo", "bar"], [""], ["foo"]]
我想做的是过滤掉数组中所有本身是空数组的元素(在这种情况下,“空数组”是指只包含一个空字符串的数组),让我只和:
[["lorem ipsum", "foo", "bar"], ["foo"]]
但是我正在努力寻找一种方法来做到这一点(对 Scala 来说还是新手) - 非常感谢任何帮助!
谢谢。
编辑(使用 Rogach 的简化):
array.filterNot(_.forall(_.isEmpty))
在您的描述中,您问如何
过滤掉数组中所有...仅包含空字符串的元素。
当前接受的答案会这样做,但也会过滤掉空数组和包含多个空字符串的数组(即不仅是[""]
,而且[]
等等["", "", ""]
。(事实上,第一部分x.isEmpty ||
是完全多余的。)如果你的数组是xss
,你需要
xss.filter(_ != Array("")) // does not work!
这不起作用,因为equals
Java 数组的方法不像您预期的那样起作用。相反,在比较数组时,请使用sameElements
或deep
:
xss.filterNot(_ sameElements Seq(""))
xss.filter(_.deep != Seq(""))
在 idomatic Scala 代码中,您使用Array
的不多,所以这不会经常出现。更喜欢Vector
或List
。
在您的情况下,您可以使用:
array.filterNot(_.corresponds(Array("")){_ == _})
使用以下内容:
val a = Array(Array(), Array(), Array(3,1,2016), Array(1,2,3026))
a.filter(_.length>0)