Ruby Hash для массива значений - PullRequest
108 голосов
/ 05 марта 2012

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

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"]} 

Есть предложения?

Ответы [ 6 ]

239 голосов
/ 05 марта 2012

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

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

Рубиновый документ здесь

38 голосов
/ 05 марта 2012

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

hash.map { |key, value| value }
21 голосов
/ 05 марта 2012
hash.collect { |k, v| v }
#returns [["a", "b", "c"], ["b", "c"]] 

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

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

7 голосов
/ 07 октября 2012
hash  = { :a => ["a", "b", "c"], :b => ["b", "c"] }
hash.values #=> [["a","b","c"],["b","c"]]
4 голосов
/ 13 марта 2016

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

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"]]
2 голосов
/ 09 октября 2015

Есть также этот:

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

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

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

something {|i| i.foo }
something(&:foo)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...