Легке запитання, але не вдалося знайти його в документі.
Як зрізати рядок чи масив n
назавжди?
>> 'Austin'[1..3]
=> "ust"
>> 'Austin'[1..]
SyntaxError: compile error
(irb):2: syntax error, unexpected ']'
from (irb):2
Легке запитання, але не вдалося знайти його в документі.
Як зрізати рядок чи масив n
назавжди?
>> 'Austin'[1..3]
=> "ust"
>> 'Austin'[1..]
SyntaxError: compile error
(irb):2: syntax error, unexpected ']'
from (irb):2
Відповіді:
Використовуйте зворотне індексування:
[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 ->
Використовуйте -1 :-)
'Austin'[1..-1] # => "ustin"
Дуже елегантно, використовуючи нескінченний асортимент, представлений в Ruby 2.6:
string = 'Austin'
string[1..] # => ustin
Сподіваюся, це комусь зручно. Вирізає пару символів від найкращого підходу до цих пір, і буде дуже читабельним, коли регулярно будуть прийматися нескінченні діапазони.
Якщо ви призначите рядок змінній, ви можете використовувати довжину / розмір
string = 'Austin'
string[1..string.length] # => ustin
string[1..string.size] # => ustin