example bidimensionales arreglos array ruby arrays hash

bidimensionales - Ruby Hash a una matriz de valores



hash ruby example (6)

Tengo esto:

hash = { "a"=>["a", "b", "c"], "b"=>["b", "c"] }

y quiero llegar a esto: [["a","b","c"],["b","c"]]

Parece que debería funcionar, pero no:

hash.each{|key,value| value} => {"a"=>["a", "b", "c"], "b"=>["b", "c"]}

¿Alguna sugerencia?


Además, un poco más 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 aquí


Es tan simple como

hash.values #=> [["a", "b", "c"], ["b", "c"]]

esto devolverá una nueva matriz poblada con los valores de hash

si quieres almacenar esa nueva matriz, haz

array_of_values = hash.values #=> [["a", "b", "c"], ["b", "c"]] array_of_values #=> [["a", "b", "c"], ["b", "c"]]


También hay este:

hash = { foo: "bar", baz: "qux" } hash.map(&:last) #=> ["bar", "qux"]

Por qué funciona:

El & llama to_proc en el objeto y lo pasa como un bloque al método.

something {|i| i.foo } something(&:foo)


Yo usaría:

hash.map { |key, value| value }


hash = { :a => ["a", "b", "c"], :b => ["b", "c"] } hash.values #=> [["a","b","c"],["b","c"]]


hash.collect { |k, v| v } #returns [["a", "b", "c"], ["b", "c"]]

Enumerable#collect toma 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 módulo Enumerable es bastante impresionante. Conocerlo bien puede ahorrarle mucho tiempo y mucho código.