¿Cómo dividir una cadena delimitada en Ruby y convertirla en una matriz?

233

Tengo una cuerda

"1,2,3,4"

y me gustaría convertirlo en una matriz:

[1,2,3,4]

¿Cómo?

Neil Middleton
fuente
11
"1,2 | 3; 42: 4711" .scan (/ \ d + /). Map {| i | i.to_i}
Jonas Elfström

Respuestas:

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

O para enteros:

>> "1,2,3,4".split(",").map { |s| s.to_i }
=> [1, 2, 3, 4]

O para versiones posteriores de ruby ​​(> = 1.9 - como lo señaló Alex):

>> "1,2,3,4".split(",").map(&:to_i)
=> [1, 2, 3, 4]
Shadwell
fuente
28
Recuerde, si está usando> = 1.9, puede usar "1,2,3,4" .split (','). Map (: to_i)
Alex Fort
77
Si está utilizando el soporte activo, puede hacer: map (&: to_i)
jonnii
31

"1,2,3,4".split(",") como cuerdas

"1,2,3,4".split(",").map { |s| s.to_i } como enteros

Oliver N.
fuente
19

Para String Integersin espacio comoString

arr = "12345"

arr.split('')

output: ["1","2","3","4","5"]

Para String Integercon espacio comoString

arr = "1 2 3 4 5"

arr.split(' ')

output: ["1","2","3","4","5"]

Para String Integersin espacio comoInteger

arr = "12345"

arr.split('').map(&:to_i)

output: [1,2,3,4,5]

Para cadena

arr = "abc"

arr.split('')

output: ["a","b","c"]

Explicación :

  1. arr -> cadena que vas a realizar cualquier acción.
  2. split() -> es un método que divide la entrada y la almacena como matriz.
  3. ''o ' 'o ','-> es un valor, que es necesario eliminar de una cadena dada.
Aravin
fuente
1

la forma más sencilla de convertir una cadena que tiene un delimitador como una coma es simplemente usar el método de división

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

puedes encontrar más información sobre cómo usar el método de división en los documentos de ruby

Divide str en subcadenas basadas en un delimitador, devolviendo una matriz de estas subcadenas.

Si el patrón es una Cadena, su contenido se usa como delimitador al dividir la cadena. Si el patrón es un espacio único, str se divide en espacios en blanco, con espacios en blanco iniciales y ejecuciones de caracteres de espacios en blanco contiguos ignorados.

Si el patrón es una expresión regular, str se divide donde coincide el patrón. Siempre que el patrón coincida con una cadena de longitud cero, str se divide en caracteres individuales. Si el patrón contiene grupos, las coincidencias respectivas también se devolverán en la matriz.

Si se omite el patrón, el valor de $; es usado Si $; es nil (que es el valor predeterminado), str se divide en espacios en blanco como si se especificara ''.

Si se omite el parámetro límite, se suprimen los campos nulos finales. Si el límite es un número positivo, como máximo se devolverá ese número de campos (si el límite es 1, toda la cadena se devuelve como la única entrada en una matriz). Si es negativo, no hay límite para el número de campos devueltos, y los campos nulos finales no se suprimen.

MZaragoza
fuente
-1
"12345".each_char.map(&:to_i)

each_charhace básicamente lo mismo que split(''): divide una cadena en una matriz de sus caracteres.

hmmm, ahora me doy cuenta de que en la pregunta original la cadena contiene comas, por lo que mi respuesta no es realmente útil ;-( ..

andiba
fuente
3
¿Puedes editar tu respuesta para explicar lo que estás haciendo?
MZaragoza