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)