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?
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"]]
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 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.
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 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"]]
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)