2009-08-26 9 views
68

cuerdas es ex="test1, test2, test3, test4, test5"Cómo dividir una cadena en Ruby y obtener todos los elementos, excepto el primero?

cuando uso

ex.split(",").first 

vuelve

"test1" 

Ahora quiero conseguir los artículos restantes, es decir, ` "test2, test3, test4, test5". Si uso

ex.split(",").last 

se devuelve sólo

"test5" 

Cómo obtener todos los restantes elementos que saltan primero?

+0

Espera, estás utilizando 'split' (un método' String') en una 'Matriz'? –

+0

disculpa guyzz ... estoy usando una cadena aquí ... voy a editar la pregunta – sgi

Respuesta

84

Prueba esto:

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

Ahora first será el primer valor, rest será el resto de la matriz.

+1

¿En qué versión de Ruby? Lo intenté en 1.8.7 y 'rest' solo contiene" test2 ". –

+6

probablemente significó 'first, * rest = ex.split (/, /)' – ezpz

+0

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

14

Dado que tiene una matriz, lo que realmente quiere es Array#slice, no split.

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

Así que con una cadena querría' ex.split (/, /). slice (1 ..- 1) 'para obtener todos los primeros elementos, suponiendo que no interesado en el primer valor. – avdgaag

9

Probablemente haya escrito mal algunas cosas. Por lo que sé, se empieza con una cadena como:

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

Entonces que quiere dividir a mantener sólo las subseries significativos:

array = string.split(/, /) 

Y al final sólo necesita todos los elementos excluyendo 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 

¿Respondió a esta pregunta?

5
ex="test1,test2,test3,test4,test5" 
all_but_first=ex.split(/,/)[1..-1] 
37
ex.split(',', 2).last 

El 2 al final dice: dividida en 2 partes, no más.

normalmente split reducirá el valor en tantas piezas como sea posible, con un segundo valor puede limitar la cantidad de piezas que obtendrá. Usando ex.split(',', 2) le dará:

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

como una matriz, en lugar de:

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

Lo malo es que tendrías que "dividir" de nuevo si quieres todos menos los primeros valores como una matriz en lugar de una cadena. Sigue siendo un buen truco. Además, el uso de 'ex.split (',', 2) .last' no devolverá la matriz que mencione, solo su último valor, ¿no? – avdgaag

+0

Error de copiar y pegar jaja, lo arregló – user163365

5

si quieres usarlos como una matriz u ya sabía, de lo que u puede utilizar cada uno de ellos como una parámetro diferente ... intente esto:

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

sentimos un poco tarde a la fiesta y un poco sorprendido de que nadie mencionó la drop método:

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

También puede hacer esto:

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

Try split(",")[i] donde i es el índice en la matriz de resultados. split da matriz debajo de

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

cuyo elemento se puede acceder por índice.

Cuestiones relacionadas