6

我有一个 type 数组String,看起来像:

[[""],["lorem ipsum", "foo", "bar"], [""], ["foo"]]

我想做的是过滤掉数组中所有本身是空数组的元素(在这种情况下,“空数组”是指只包含一个空字符串的数组),让我只和:

[["lorem ipsum", "foo", "bar"], ["foo"]]

但是我正在努力寻找一种方法来做到这一点(对 Scala 来说还是新手) - 非常感谢任何帮助!

谢谢。

4

4 回答 4

16

编辑(使用 Rogach 的简化):

array.filterNot(_.forall(_.isEmpty))
于 2012-07-17T13:49:15.537 回答
0

在您的描述中,您问如何

过滤掉数组中所有...仅包含空字符串的元素。

当前接受的答案会这样做,但也会过滤掉空数组和包含多个空字符串的数组(即不仅是[""],而且[]等等["", "", ""]。(事实上,第一部分x.isEmpty ||是完全多余的。)如果你的数组是xss,你需要

xss.filter(_ != Array(""))  // does not work!

这不起作用,因为equalsJava 数组的方法不像您预期​​的那样起作用。相反,在比较数组时,请使用sameElementsdeep

xss.filterNot(_ sameElements Seq(""))

xss.filter(_.deep != Seq(""))

在 idomatic Sc​​ala 代码中,您使用Array的不多,所以这不会经常出现。更喜欢VectorList

于 2012-07-17T18:32:20.710 回答
0

在您的情况下,您可以使用:

array.filterNot(_.corresponds(Array("")){_ == _})
于 2017-01-25T17:48:28.263 回答
-1

使用以下内容:

val a = Array(Array(), Array(), Array(3,1,2016), Array(1,2,3026))

a.filter(_.length>0)
于 2017-01-25T06:17:11.477 回答