web-dev-qa-db-fra.com

Ruby Hash to array of values

J'ai ceci:

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

et je veux arriver à ceci: [["a","b","c"],["b","c"]]

Cela semble fonctionner, mais cela ne fonctionne pas:

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

Aucune suggestion?

109
tbrooke

Aussi, un peu plus simple ....

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

Ruby doc ici

240
Ray Toal

J'utiliserais:

hash.map { |key, value| value }
39
Michael Durrant
_hash.collect { |k, v| v }
#returns [["a", "b", "c"], ["b", "c"]] 
_

Enumerable#collect prend un bloc et retourne un tableau des résultats de son exécution une fois sur chaque élément de l'énumérable. Donc, ce code ignore simplement les clés et renvoie un tableau de toutes les valeurs.

Le module Enumerable est assez génial. Le savoir bien peut vous faire économiser beaucoup de temps et de code.

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

C'est aussi simple que

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

cela retournera un nouveau tableau rempli avec les valeurs de hash

si vous voulez stocker ce nouveau tableau faire

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

array_of_values
 #=> [["a", "b", "c"], ["b", "c"]]
4
Melissa Jimison

Il y a aussi celui-ci:

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

Pourquoi ça marche:

Le & appelle to_proc sur l'objet et le transmet sous forme de bloc à la méthode.

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