J'ai ceci:
hash = { "a"=>["a", "b", "c"], "b"=>["b", "c"] }
et je veux arriver à ceci: [["a","b","c"],["b","c"]]
Cela semble devoir fonctionner, mais cela ne fonctionne pas:
hash.each{|key,value| value}
=> {"a"=>["a", "b", "c"], "b"=>["b", "c"]}
Aucune suggestion?
hash.values
étant la meilleure OMI). Mais je voulais souligner que lorsque vous fournissez un bloc,Hash#each
il renverra simplement la valeur complète du hachage. Si vous souhaitez effectuer une opération sur chaque élément et le renvoyer sous forme de tableau, utilisezHash#collect
ou son aliasHash#map
. Plus de trucs sur Enumerables ici .Réponses:
Aussi, un peu plus simple ...
Ruby doc ici
la source
map
), car j'aime beaucoup ça!Hash#values
est non seulement plus simple, mais plus efficace. Comparertime ruby -e '(1..1000000).reduce({}){|h,i| h.store i,i; h}.values'
avectime ruby -e '(1..1000000).reduce({}){|h,i| h.store i,i; h}.map{|k,v| v}'
J'utiliserais:
la source
Hash#values
.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 renvoie un tableau de toutes les valeurs.Le
Enumerable
module est assez génial. Le savoir bien peut vous faire gagner beaucoup de temps et beaucoup de code.la source
hash.values
est finalement la bonne réponse ici.hash.map(&:second)
:)la source
C'est aussi simple que
cela renverra un nouveau tableau rempli avec les valeurs de hachage
si vous voulez stocker ce nouveau tableau, faites
la source
Il y a aussi celui-ci:
Pourquoi ça marche:
Les
&
appelsto_proc
sur l'objet, et il passe comme un bloc à la méthode.la source