Pasé algún tiempo tratando de encontrar una manera de realizar operaciones básicas en cada elemento de una matriz, como suma, ronda, etc.

No vi una forma incorporada de hacer esto, así que intenté crear la mía propia después de encontrar "Métodos genéricos 'sum' y 'mean' para matrices Ruby ".

¿Alguien puede explicar por qué mi método round no funciona?

class Array
  def sum
    inject(nil) { |sum, x| sum ? sum + x : x }
  end

  def mean
    sum / size
  end

  def round(p)
    inject(nil) { |x| (x * 10 ^ (p-1)).floor / 10 ^ (p - 1) }
  end   
end

puts [1.1234, 1.45656, 1.546567, 1.4577887].mean
puts [1.1234, 1.45656, 1.546567, 1.4577887].round(6)
0
Rilcon42 11 ago. 2016 a las 20:48

1 respuesta

La mejor respuesta

Quieres lo siguiente.

class Array
  def sum
    inject(:+)
  end

  def mean
    sum / size.to_f
  end

  def round(p)
    map { |n| n.round(p) }
  end 
end

puts [1.1234, 1.45656, 1.546567, 1.4577887].mean
1.3960789249999999

puts [1.1234, 1.45656, 1.546567, 1.4577887].round(6)
1.1234
1.45656
1.546567
1.457789

Tenga en cuenta que se necesita sum.to_f (o size.to_f) cuando la matriz contiene solo números enteros. Si arr.sum = 3 y arr.size = 2, sum / size #=> 1 mientras que sum / size.to_f #=> 1.5.

2
Cary Swoveland 11 ago. 2016 a las 20:00