Índice de segmento de cadena de rubí: str [n..infinity]


84

Pregunta fácil, pero no pude encontrarla en el documento.

¿Cómo corto una cadena o matriz de nhasta para siempre?

>> 'Austin'[1..3]
=> "ust"
>> 'Austin'[1..]
SyntaxError: compile error
(irb):2: syntax error, unexpected ']'
    from (irb):2

1
Este último funcionará desde Ruby 2.6 y probablemente se convertirá en la forma 'Railsy' de lograrlo; consulte aquí para obtener más información .
SRack el

Respuestas:


165

Utilice la indexación inversa:

[1..-1]

Un elemento en Ruby (y algunos otros lenguajes) tiene un índice directo y uno "invertido". Entonces, la cadena con longitud ntiene índices 0..(n-1)adicionales (-n)..-1, pero no más; no puede usar >=no <-níndices.

  'i' 'n'|'A' 'u' 's' 't' 'i' 'n'|'A' 'u' 's' 't' 'i' 'n'|'A' 'u' 's'
  -8  -7  -6  -5  -4  -3  -2  -1   0   1   2   3   4   5   6   7   8 
<- error |                you can use this               | error ->

2
Buena ilustración, sin embargo, su uso de letras "válidas" (es decir, las que existen en la cadena) es un poco engañoso en mi opinión, ya que los datos fuera de los límites de la cadena son realmente indefinidos. Eso podría ser cualquier cosa, incluidos los no personajes. De todos modos, +1 para una respuesta tan bien explicada :-)
Topher Fangio


10

Bastante elegante usando el rango infinito introducido en Ruby 2.6:

string = 'Austin'
string[1..] # => ustin

Espero que sea útil para alguien. Elimina un par de caracteres del mejor enfoque hasta ahora, y será muy legible una vez que se adopten regularmente rangos infinitos.


3

Si asigna la cadena a una variable, puede usar longitud / tamaño

string = 'Austin'
string[1..string.length]  # => ustin
string[1..string.size]    # => ustin
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.