2012-07-17 127 views
6

數組的數組空數組我有String類型,數組的數組它看起來像:過濾從斯卡拉

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

我希望做的是過濾掉所有的元素陣列本身是一個空數組(其中在這種情況下,通過「空陣」,我的意思是隻包含一個空字符串數組),離開我只是:

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

但是我在努力尋找一種方法來做到這一點(斯卡拉仍然是新的) - 非常感謝任何幫助!

謝謝。

+5

但他們不是空的;他們包含一個字符串 – 2012-07-17 13:46:19

+0

道歉,這是我糟糕的措辭。我會修改我的問題來澄清。 – 2012-07-17 13:46:45

回答

16

編輯(與Rogach的簡化):

array.filterNot(_.forall(_.isEmpty)) 
+1

我相信這裏不需要x.isEmpty - 如果'x'確實是空的,'x.forall(_。isEmpty)'仍然會返回true。 – Rogach 2012-07-18 06:05:14

+0

感謝提示,Rogach。你是絕對正確的。我將你的建議納入答案。 – 2012-07-18 06:47:30

0

在你的描述你問如何

過濾掉所有的數組中的元素......只包含一個 空字符串。

目前公認的答案做到這一點,同時也過濾掉空數組和數組包含多個空字符串(即不只是[""],但[]["", "", ""]等爲好。(事實上,第一部分是x.isEmpty ||完全是多餘的。)從字面上翻譯你的要求,如果你的陣列是xss,你需要

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

這不起作用,因爲Java數組的equals方法doesn't work as you might expect,而是比較數組時,使用sameElementsdeep

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

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

在idomatic Sc​​ala代碼你不使用Array很多,所以這並不突然出現過於頻繁。首選VectorList

-1

使用以下命令:

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

a.filter(_.length>0) 
+0

請根據本網站的指導方針來格式化您的代碼(將其包含在反引號中或將其縮進適當數量的空格中),以便它以灰色背景中的等寬字體顯示。此外,嘗試將您的解決方案應用於給定的輸入並顯示它產生所需的輸出。歡迎來到本網站! – Dario 2017-01-25 06:48:09

+0

非常感謝,這是我第一次做出答案,下次我會更好; – tuitui 2017-01-25 07:07:58

+0

@tuitui你可以通過它下面的小「編輯」文本編輯你的答案。然而,我現在會這樣做。 – AJFarmar 2017-01-25 17:08:15

0

在你的情況,你可以使用:

array.filterNot(_.corresponds(Array("")){_ == _})