Объединить массивы, если они не нулевые и не пустые

В Ruby есть несколько массивов (в данном случае 4 массива)

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.

Есть ли какой-нибудь, Руби, способ проверить, не является ли массив нулевым и не пустым, и если да, то объединить его с result_array?


person Community    schedule 01.09.2012    source источник


Ответы (2)


Ядро определяет метод 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"}]
person Joshua Cheek    schedule 01.09.2012

person    schedule
comment
Замечательно. Постараюсь запомнить это. - person dimitarvp; 01.09.2012
comment
Чтобы обработать угловой случай, когда все arrayX являются nil, используйте reduce([], :|) - person Marc-André Lafortune; 01.09.2012
comment
Действительно, я не подумал об этом случае, спасибо за исправление :) - person hs-; 01.09.2012