2012-09-01 30 views
4

有在紅寶石一些陣列(是這種情況下,存在4陣列)合併數組如果不是nil,而不是空

array1 = [{key="label1.1", value="label1.2"}, {key="label1.2", value="label1.2"}] 
array2 = [{key="label2.1", value="label2.2"}] 

array3 = [] 
array4 = nil 
result_array = array1 | array2 | array3 | array4 

每個陣列具有相同的結構,其他:它的散列值。它有多少個元素,如果它是零或空 - 它不知道。

所以我需要result_array看:

[{key="label1.1", value="label1.2"}, {key="label1.2", value="label1.2"}, {key="label2.1", value="label2.2"}]

但是該代碼會導致一個例外,因爲array4等於nil

是否有任何Ruby檢查數組是否不爲零且不爲空的方式,如果是,則將它合併到result_array

回答

11
[array1, array2, array3, array4].compact.reduce([], :|) 
+0

很好。要試着記住這一點。 – dimitarvp

+5

爲了處理所有'arrayX'都是'nil'的情況,使用'reduce([],:|)' –

+0

確實,我沒有想到這種情況,感謝您的糾正:) –

4

內核定義了一個名爲Array的方法,它將單獨存儲數組,但將nil轉換爲空數組。

array1 = [{:key => "label1.1", :value => "label1.2"}, {:key =>"label1.2", :value => "label1.2"}] 
array2 = [{:key => "label2.1", :value => "label2.2"}] 

array3 = [] 
array4 = nil 
result_array = Array(array1) | Array(array2) | Array(array3) | Array(array4) 
result_array # => [{:key=>"label1.1", :value=>"label1.2"}, {:key=>"label1.2", :value=>"label1.2"}, {:key=>"label2.1", :value=>"label2.2"}]