Ruby Hash à un tableau de valeurs

J’ai ceci:

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

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

Cela semble fonctionner, mais ça ne marche pas:

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

Aucune suggestion?

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

J’utiliserais:

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

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

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

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

C’est aussi simple que

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

cela retournera un nouveau tableau rempli avec les valeurs du hachage

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

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’object et le transmet en tant que bloc à la méthode.

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