루비 문자열 슬라이스 인덱스 : str [n..infinity]


84

쉬운 질문이지만 문서에서 찾을 수 없습니다.

n영원히 문자열이나 배열을 어떻게 슬라이스 합니까?

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

1
후자는 Ruby 2.6에서 작동하며이를 달성하는 'Railsy'방식이 될 것 입니다. 자세한 내용은 여기를 참조 하세요 .
SRack

답변:


165

역 인덱싱 사용 :

[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 :-)
Topher Fangio 2010-08-31


10

Ruby 2.6에 도입 된 무한 범위를 사용하여 매우 우아합니다 .

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

누군가에게 편리하기를 바랍니다. 지금까지 최선의 접근 방식에서 몇 개의 문자를 잘라 내고 끝없는 범위가 정기적으로 채택되면 매우 가독성이 좋습니다.


3

문자열을 변수에 할당하면 길이 / 크기를 사용할 수 있습니다.

string = 'Austin'
string[1..string.length]  # => ustin
string[1..string.size]    # => ustin
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.