2016-05-27 5 views
0

У меня есть массив хэшей:принимая значения из массива Рубиновый хэшей

a = [{"Key1"=>"Value1", "Key2"=>"Value2"}, 
    {"Key1"=>"Value3", "Key2"=>"Value4"}, 
    {"Key1"=>"Value5", "Key2"=>"Value6"}] 

В основном я пытаюсь получить выход с только значения, а не какие-либо клавиши. Что-то вроде этого

['Value1', 'Value2', 'Value3', 'Value4', 'Value5', 'Value6'] 

Вот код, который я пробовал. Как key1 и key2 одинаковы, я хранятся и ключи в массиве ....

k = ["key1", "key2"] 
for i in 0..a.length 
    k.each do |key_to_delete| 
    a[i].delete key_to_delete unless a[i].nil? 
    end 
end 

Однако, это удаляет все значения, и я получаю пустой массив. Любая помощь приветствуется.

+0

На самом деле у вас нет рубинового хеша в a, у вас есть массив хэшей в a. –

+0

Вы хотите массив массивов или всего лишь один массив из всех значений? –

+1

Может быть, вы этого хотите? [["Value1", "Value2"], ["Value3", "Value4"], ["Value5", "Value6"]] (Просто измените ответ Илии на использование 'map' вместо' flat_map') – libcthorne

ответ

5

Вы можете использовать Enumerable#flat_map и получать значения из каждого хеш:

a.flat_map(&:values) 
=> ["Value1", "Value2", "Value3", "Value4", "Value5", "Value6"] 

Это ответ на первоначальный вопрос.

+0

Или еще короче: 'a.flat_map (&: значения)' –

+0

Идеально, и это тот результат, который я хотел. Большое спасибо за ваш ответ молнии :) – TGR

+0

@TGR это в основном выход, который у вас был в исходном вопросе, почему вы его изменили? – Stefan

Смежные вопросы