Ruby Hash для массива значений

У меня есть это:

hash  = { "a"=>["a", "b", "c"], "b"=>["b", "c"] } 

и я хочу сделать следующее: [["a","b","c"],["b","c"]]

Кажется, что он должен работать, но это не так:

hash.each{|key,value| value}
=> {"a"=>["a", "b", "c"], "b"=>["b", "c"]} 

Любые предложения?

Ответ 1

Кроме того, немного проще....

>> hash = { "a"=>["a", "b", "c"], "b"=>["b", "c"] }
=> {"a"=>["a", "b", "c"], "b"=>["b", "c"]}
>> hash.values
=> [["a", "b", "c"], ["b", "c"]]

Ruby doc here

Ответ 2

Я бы использовал:

hash.map { |key, value| value }

Ответ 3

hash.collect { |k, v| v }
#returns [["a", "b", "c"], ["b", "c"]] 

Enumerable#collect принимает блок и возвращает массив результатов запуска блока один раз на каждый элемент перечислимого. Таким образом, этот код просто игнорирует ключи и возвращает массив всех значений.

Модуль Enumerable довольно увлекательный. Зная это, вы можете сэкономить много времени и много кода.

Ответ 4

hash  = { :a => ["a", "b", "c"], :b => ["b", "c"] }
hash.values #=> [["a","b","c"],["b","c"]]

Ответ 5

Есть и этот:

hash = { foo: "bar", baz: "qux" }
hash.map(&:last) #=> ["bar", "qux"]

Почему это работает:

& вызывает to_proc объекта и передает его как блок для метода.

something {|i| i.foo }
something(&:foo)

Ответ 6

Это так же просто, как

hash.values
#=> [["a", "b", "c"], ["b", "c"]]

это вернет новый массив, заполненный значениями из хеша

если вы хотите сохранить этот новый массив

array_of_values = hash.values
#=> [["a", "b", "c"], ["b", "c"]]

array_of_values
 #=> [["a", "b", "c"], ["b", "c"]]