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

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

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


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.


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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.