2010-12-22 11 views
5

En mi aplicación, que tiene un campo de texto en el que el usuario introduce algo como estosecuencia de números Convertir a array de números

"1,2,3,4" 

la que se almacena la base de datos. Ahora, cuando quiero utilizar los números internos, tengo dos opciones:

"1,2,3,4".split(',') 

O

string.scan(/\d+/) do |x| 
    a << x 
end 

Ambas formas i obtiene una matriz como

["1","2","3","4"] 

y luego puedo usar los números llamando a_i en cada uno de ellos.
¿Hay una mejor manera de hacer esto, que convierte

"1,2,3" to [1,2,3] and not ["1","2","3"] 

Respuesta

13
str.split(",").map {|i| i.to_i} 

pero la idea es igual a ti ....

+4

Y en 1.8.7p302:. Str.split '('') mapa (Y: to_i)' –

+0

pensé &: to_i estaba un poco mal visto debido a problemas de rendimiento. ¿No? Bueno para la gente saber que existe, aunque seguro. –

+0

@Aditya: Es * más * rendimiento en 1.9 y 1.8.7p302 afaik. –

-3

usted puede hacerlo siguiendo el método: - "1 , 2,3,4" .split (/, /)

Esto le dará siguiente resultado: -

[ "1", "2", "3", "4"]

Gracias ....

+0

La pregunta es cómo obtener '[1,2,3,4]': p –

1

Puede hacerlo.

t = "1,2,3,4".split(',').collect{|n| n.to_i} 
0

en Ruby 1.9.3 se puede hacer lo siguiente:

No hay espacio después de la coma:

"1,2,3,4".split(',') # => ["1","2","3","4"] 

Con el espacio después de la coma:

"1,2,3,4".split(', ') # => ["1,2,3,4"] 

n espacio después de la coma:

"1,2,3,4".split(',').map(&:to_i) # => [1,2,3,4] 

Con un espacio después de la coma, que se va a conseguir esto:

"1,2,3,4".split(', ').map(&:to_i) # => [1] 
Cuestiones relacionadas