Индекс фрагмента строки Ruby: str [n..infinity] - PullRequest
70 голосов
/ 31 августа 2010

Простой вопрос, но не удалось найти его в документе.

Как мне нарезать строку или массив с n до бесконечности?

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

Ответы [ 5 ]

146 голосов
/ 31 августа 2010

Использовать обратное индексирование:

[1..-1]

Элемент в Ruby (и некоторых других языках) имеет прямой индекс и "обратный" индекс.Итак, строка длиной n имеет 0..(n-1) и дополнительные (-n)..-1 индексы, но не более - вы не можете использовать >=n или <-n индексы.

  '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 ->
14 голосов
/ 31 августа 2010

Используйте -1: -)

'Austin'[1..-1] # => "ustin"
4 голосов
/ 31 августа 2010

Попробуйте использовать [1..-1]

3 голосов
/ 03 января 2019

Довольно элегантно, используя бесконечный диапазон , представленный в Ruby 2.6:

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

Надеюсь, это кому-нибудь пригодится.Отрезает пару символов из лучшего подхода до сих пор, и будет очень читабельным, как только будут приняты бесконечные диапазоны.

3 голосов
/ 31 августа 2010

Если вы присвоите строку переменной, вы можете использовать длину / размер

string = 'Austin'
string[1..string.length]  # => ustin
string[1..string.size]    # => ustin
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...