Tengo esto:
hash = { "a"=>["a", "b", "c"], "b"=>["b", "c"] }
y quiero llegar a esto: [["a","b","c"],["b","c"]]
Esto parece que debería funcionar, pero no es así:
hash.each{|key,value| value}
=> {"a"=>["a", "b", "c"], "b"=>["b", "c"]}
¿Alguna sugerencia?

hash.valuessiendo la mejor en mi opinión). Pero quería señalar que cuando le proporcionas un bloqueHash#each, solo devolverá el valor completo del hash. Si desea realizar una operación en cada elemento y devolverlo como una matriz, useHash#collecto su aliasHash#map. Más cosas sobre Enumerables aquí .Respuestas:
Además, un poco más simple ...
Ruby doc aquí
fuente
map), ¡porque me gusta mucho esto!Hash#valuesno solo es más simple, sino más eficiente. Comparartime ruby -e '(1..1000000).reduce({}){|h,i| h.store i,i; h}.values'contime ruby -e '(1..1000000).reduce({}){|h,i| h.store i,i; h}.map{|k,v| v}'Yo usaría:
fuente
Hash#values.Enumerable#collecttoma un bloque y devuelve una matriz de los resultados de ejecutar el bloque una vez en cada elemento del enumerable. Entonces, este código simplemente ignora las claves y devuelve una matriz de todos los valores.El
Enumerablemódulo es bastante impresionante. Conocerlo bien puede ahorrarle mucho tiempo y mucho código.fuente
hash.valueses en última instancia la respuesta correcta aquí.hash.map(&:second):)fuente
Es tan simple como
esto devolverá una nueva matriz poblada con los valores de hash
si quieres almacenar esa nueva matriz, haz
fuente
También está este:
Por qué funciona:
La
&llamato_procen el objeto, y pasa como un bloque para el método.fuente