¿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?

sgi
fuente
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.

avdgaag
fuente
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"]
user163365
fuente
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]
Konrad Rudolph
fuente
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 ?

bltxd
fuente
6
ex="test1,test2,test3,test4,test5"
all_but_first=ex.split(/,/)[1..-1]
Jonas Elfström
fuente
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"
Anand Shah
fuente
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(",")
Raafat
fuente
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 
G Gill
fuente
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.

lalit
fuente