update rails create array ruby hash

rails - Ruby: ¿Cuál es el método más fácil para actualizar los valores de Hash?



ruby hash to json (5)

Decir:

h = { 1 => 10, 2 => 20, 5 => 70, 8 => 90, 4 => 34 }

Me gustaría cambiar cada valor v a foo(v ), tal que h será:

h = { 1 => foo(10), 2 => foo(20), 5 => foo(70), 8 => foo(90), 4 => foo(34) }

¿Cuál es la forma más elegante de lograr esto?


El siguiente es un poco más rápido que @Dan Cheail para hashes grandes, y tiene un estilo de programación un poco más funcional:

new_hash = Hash[old_hash.map {|key, value| key, foo(value)}]

Hash#map crea una matriz de pares de valores clave, y Hash.[] Convierte la matriz de pares en un hash.


Esto lo hara:

h.each {|k, v| h[k] = foo(v)}


Hay un par de maneras de hacerlo; la forma más directa sería usar Hash#each para actualizar un nuevo hash:

new_hash = {} old_hash.each do |key, value| new_hash[key] = foo(value) end


Puede usar la update (alias de merge! ) Para actualizar cada valor usando un bloque:

hash.update(hash) { |key, value| value * 2 }

Tenga en cuenta que efectivamente estamos fusionando el hash consigo mismo. Esto es necesario porque Ruby llamará al bloque para resolver la fusión de las claves que colisionan, estableciendo el valor con el valor de retorno del bloque.