Al llamar each
en un hash de rubí, se puede obtener la clave y el valor muy bien separado de esta manera:¿Es posible separar la clave de salida y el valor de un hash al usar Inject?
{ :a => 1, :b => 2, :c => 3 }.each do |key, value|
puts "key is #{key} and value is #{value}"
end
=========================
key is :a and value is 1
key is :b and value is 2
key is :c and value is 3
=> {:a=>1, :b=>2, :c=>3}
Sin embargo, esto no parece funcionar cuando se utiliza inject
.
{ :a => 1, :b => 2, :c => 3 }.inject(0) do |result, key, value|
puts "key is #{key} and value is #{value}"
result + value
end
=========================
key is [:a, 1] and value is
TypeError: nil can't be coerced into Fixnum
En el ejemplo simplificado anterior Realmente no necesito las llaves, así que sólo podía llamar hash.values.inject
, pero asumiendo que necesito tanto, hay una manera más limpia de hacer esto que este horrible bodge?
{ :a => 1, :b => 2, :c => 3 }.inject(0) do |result, key_and_value|
puts "key is #{key_and_value[0]} and value is #{key_and_value[1]}"
result + key_and_value[1]
end
Gracias! Nuevo para Ruby y esto me ha irritado ya que su fealdad contrasta con el resto del lenguaje. Sabía que habría una solución simple y simple como esta. – Russell
+1 porque esta fue una buena respuesta, y me hubiera irritado estar atascado en 299 reputación ... – Russell