Ruby de Hachage pour tableau de valeurs
J'ai ceci:
hash = { "a"=>["a", "b", "c"], "b"=>["b", "c"] }
et je veux arriver à ceci: [["a","b","c"],["b","c"]]
Cela semble comme il devrait fonctionner, mais il n'a pas d':
hash.each{|key,value| value}
=> {"a"=>["a", "b", "c"], "b"=>["b", "c"]}
Des suggestions?
- Les réponses ci-dessous sont correctes (
hash.values
étant le meilleur de l'OMI). Mais je voulais faire remarquer lorsque vous fournir un bloc deHash#each
il suffit de renvoyer la totalité de la valeur du hachage. Si vous voulez faire une opération sur chaque élément et de retour que comme un tableau, utilisezHash#collect
ou son aliasHash#map
. Plus de choses sur Enumerables ici. - Cette question ressemble étrangement familier... je me demande combien de personnes travaillent sur le même devoir à la maison maintenant.
Vous devez vous connecter pour publier un commentaire.
Aussi, un peu plus simple....
Ruby doc ici
map
), cos j'aime beaucoup!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}'
Je voudrais utiliser:
Hash#values
.key
variable, vous pouvez même le fairehash.map { |_, value| value }
Énumérable#collecter
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ération. Donc ce code ignore juste les touches et retourne un tableau de toutes les valeurs.La
Enumerable
module est assez impressionnant. Sachant que ça peut bien vous faire économiser beaucoup de temps et beaucoup de code.hash.values
est finalement la bonne réponse ici.hash.map(&:second)
🙂C'est aussi simple que
cela renvoie un nouveau tableau rempli avec les valeurs de hachage
si vous souhaitez stocker cette nouvelle matrice de faire
Il y a aussi celui-ci:
Pourquoi ça marche:
La
&
appelsto_proc
sur l'objet, et les transmet comme un bloc de la méthode.