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