2012-07-16 8 views
5

Como saben en Ruby que puede hacercómo hacer número de sufijo cadena

"%03d" % 5 
#=> "005" 

"%03d" % 55 
#=> "055" 

"%03d" % 555 
#=> "555" 

así que básicamente número tendrá prefijo "0" durante 3 lugares de cuerda

preguntaba ¿hay posibilidad de hacer varias sufijo de cadena de forma similar agradable? (por favor, no si las declaraciones)

something 5 
#=> 500 

something 55 
#=> 550 

something 555 
# => 555 

Respuesta

7

cómo sobre el método ljust?

"5".ljust(3, "0") 

y algunos to_s y to_i método de llamadas Si quieres hacer eso a enteros

se podría evitar la conversión de cadenas con poco más de matemáticas como log_10 encontrar el número de dígitos de un número entero y luego i *= 10**x donde x es la cantidad de más de 0 necesita

así:

def something(int, power=3) 
    int * 10**([power - Math.log10(int).to_i - 1, 0].max) 
end 
+0

muy agradable, por lo que su sugerencia para la velocidad es la solución log10? me parece un poco más pesado que la solución ljust – equivalent8

+0

Hice la prueba de velocidad, la solución "ljust" es la solución más rápida https://gist.github.com/3122349 (y más limpia :)) – equivalent8

+0

y su prueba no es exactamente justa para la versión int ya que no prueba el entero <-> conversión de cadena. mira esto: https://gist.github.com/3122511 - diferencia significativa a favor de log10. + tengo que mencionar que [] .max fue el cuello de botella ya que estaba creando un nuevo objeto de matriz en cada iteración. El método max puede ser incluido con mucho mejor rendimiento obviamente :) – keymone

0

¿Qué tal

def prettify(n) 
    ("%03d" % (n.to_s.reverse.to_i)).to_s.reverse 
    end 

cuales

  • convierte sus números de secuencia
  • lo invierte
  • convierte de nuevo a una serie
  • formatos que
  • convierte de nuevo a una int
  • lo invierte de nuevo

El mantenimiento de esta pieza de código puede convertirse en un desafío de unos meses a partir de ahora, por supuesto :-)

+0

es una solución, pero más que eso "ljust" es provisto por ruby ​​directamente http://ruby-doc.org/core-1.9.3/String.html#method-i-ljust – equivalent8

Cuestiones relacionadas