¿Cómo dividir una cadena en Ruby y obtener todos los elementos excepto el primero?


83

La cadena es ex="test1, test2, test3, test4, test5"

cuando uso

ex.split(",").first

vuelve

"test1"

Ahora quiero obtener los elementos restantes, es decir, `" test2, test3, test4, test5 ". Si uso

ex.split(",").last

solo regresa

"test5"

¿Cómo hacer que todos los elementos restantes omitan el primero?


Espera, estás usando split(un Stringmétodo) en un Array?
Konrad Rudolph

lo siento guyzz ... estoy usando una cadena aquí ...
editaré

Respuestas:


98

Prueba esto:

first, *rest = ex.split(/, /)

Ahora firstserá el primer valor, restserá el resto de la matriz.


1
¿En qué versión de Ruby? Lo probé en 1.8.7 y restsolo contiene "test2".
Jonas Elfström

7
probablemente quiso decirfirst,*rest = ex.split(/,/)
ezpz

Sí, no pude probar mi línea en ese momento. first, *rest = ex.split(/,/)fue de hecho lo que quise decir. Gracias por aclarar eso.
avdgaag

Otra forma es obtener un rango de la matriz resultante. things = ex.split(/,/); things[1..-1]
Russell B

44
ex.split(',', 2).last

El 2 al final dice: dividir en 2 piezas, no más.

normalmente split cortará el valor en tantas partes como sea posible, usando un segundo valor puede limitar la cantidad de partes que obtendrá. El uso ex.split(',', 2)te dará:

["test1", "test2, test3, test4, test5"]

como una matriz, en lugar de:

["test1", "test2", "test3", "test4", "test5"]

La desventaja es que tendría que hacerlo de splitnuevo si desea todos los valores excepto los primeros como una matriz en lugar de una cadena. Sigue siendo un buen truco. Además, usar ex.split(',', 2).lastno devolvería la matriz que menciona, solo su último valor, ¿verdad?
avdgaag

Error de copiar y pegar jaja, lo solucionó
user163365

15

Como tienes una matriz, lo que realmente quieres es Array#slice, no split.

rest = ex.slice(1 .. -1)
# or
rest = ex[1 .. -1]

3
Entonces, con una cadena, querrá ex.split(/, /).slice(1..-1)obtener todos los elementos menos los primeros, suponiendo que no esté interesado en el primer valor.
avdgaag

9

Probablemente escribiste mal algunas cosas. Por lo que deduzco, comienzas con una cadena como:

string = "test1, test2, test3, test4, test5"

Luego, desea dividirlo para mantener solo las subcadenas significativas:

array = string.split(/, /)

Y al final solo necesitas todos los elementos excepto el primero:

# We extract and remove the first element from array
first_element = array.shift

# Now array contains the expected result, you can check it with
puts array.inspect

Eso responde a su pregunta ?



6

Lo siento un poco tarde para la fiesta y un poco sorprendido de que nadie haya mencionado el método de caída :

ex="test1, test2, test3, test4, test5"
ex.split(",").drop(1).join(",")
=> "test2,test3,test4,test5"

5

si desea usarlos como una matriz que ya conocía, de lo contrario, puede usar cada uno de ellos como un parámetro diferente ... intente esto:

parameter1,parameter2,parameter3,parameter4,parameter5 = ex.split(",")

2

También puedes hacer esto:

String is ex="test1, test2, test3, test4, test5"
array = ex.split(/,/)
array.size.times do |i|
  p array[i]
end 

0

Pruebe split(",")[i]dónde iestá el índice en la matriz de resultados. splitda matriz a continuación

["test1", " test2", " test3", " test4", " test5"] 

a cuyo elemento se puede acceder mediante index.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.