Индекс среза строки Ruby: str [n..infinity]
Легкий вопрос, но не нашел его в документе.
Как отрезать строку или массив от n
до бесконечности?
>> 'Austin'[1..3]
=> "ust"
>> 'Austin'[1..]
SyntaxError: compile error
(irb):2: syntax error, unexpected ']'
from (irb):2
Ответы
Ответ 1
Используйте обратную индексацию:
[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 ->
Ответ 2
Использовать -1: -)
'Austin'[1..-1] # => "ustin"
Ответ 3
Попробуйте использовать [1..-1]
Ответ 4
Если вы назначаете строку переменной, вы можете использовать длину/размер
string = 'Austin'
string[1..string.length] # => ustin
string[1..string.size] # => ustin
Ответ 5
Довольно элегантно, используя бесконечный диапазон, представленный в Ruby 2.6:
string = 'Austin'
string[1..] # => ustin
Надеюсь, что это пригодится кому-то. Отрезает пару символов от лучшего подхода до сих пор, и будет очень читабельным, как только будут приняты бесконечные диапазоны.