Ruby String Slice Index: str [n..infinity]

83

Einfache Frage, konnte sie aber nicht im Dokument finden.

Wie schneide ich einen String oder ein Array von nbis für immer?

>> 'Austin'[1..3]
=> "ust"
>> 'Austin'[1..]
SyntaxError: compile error
(irb):2: syntax error, unexpected ']'
    from (irb):2
Austin Richardson
quelle
1
Letzteres wird ab Ruby 2.6 funktionieren und wahrscheinlich der 'Railsy'-Weg sein, um dies zu erreichen - siehe hier für weitere Informationen .
SRack

Antworten:

164

Verwenden Sie die umgekehrte Indizierung:

[1..-1]

Ein Element in Ruby (und einigen anderen Sprachen) hat einen direkten und einen "umgekehrten" Index. Zeichenfolge mit Länge nhat also 0..(n-1)und zusätzliche (-n)..-1Indizes, aber nicht mehr - Sie können keine >=noder <-nIndizes verwenden.

  '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 ->
Nakilon
quelle
2
Eine gute Illustration, aber Ihre Verwendung von "gültigen" Buchstaben (dh solchen, die in der Zeichenfolge vorhanden sind) ist meiner Meinung nach etwas irreführend, da Daten außerhalb der Grenzen der Zeichenfolge wirklich undefiniert sind. Das kann alles sein, auch Nicht-Charaktere. Wie auch immer, +1 für eine so gut erklärte Antwort :-)
Topher Fangio
17

Verwende 1 :-)

'Austin'[1..-1] # => "ustin"
Topher Fangio
quelle
10

Ziemlich elegant mit der endlosen Reichweite, die in Ruby 2.6 eingeführt wurde:

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

Hoffe das ist praktisch für jemanden. Schneidet ein paar Zeichen vom bisher besten Ansatz ab und ist sehr gut lesbar, wenn regelmäßig endlose Bereiche übernommen werden.

SRack
quelle
3

Wenn Sie die Zeichenfolge einer Variablen zuweisen, können Sie Länge / Größe verwenden

string = 'Austin'
string[1..string.length]  # => ustin
string[1..string.size]    # => ustin
Jason Noble
quelle