Chỉ số lát cắt chuỗi Ruby: str [n..infinity]


84

Câu hỏi dễ, nhưng không thể tìm thấy nó trong tài liệu.

Làm cách nào để chia một chuỗi hoặc một mảng ncho đến mãi mãi?

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

1
Phần sau sẽ hoạt động từ Ruby 2.6 và có thể sẽ trở thành cách 'Railsy' để đạt được điều này - xem tại đây để biết thêm thông tin .
SRack

Câu trả lời:


165

Sử dụng lập chỉ mục ngược:

[1..-1]

Một phần tử trong Ruby (và một số ngôn ngữ khác) có chỉ mục chuyển tiếp thẳng và chỉ mục "đảo ngược". Vì vậy, chuỗi có độ dài n0..(n-1)và các (-n)..-1chỉ mục bổ sung , nhưng không có thêm - bạn không thể sử dụng >=nhoặc <-nlập chỉ mục.

  '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
Minh họa đẹp, tuy nhiên, việc bạn sử dụng các chữ cái "hợp lệ" (tức là những chữ cái hiện có trong chuỗi) theo quan điểm của tôi là hơi sai lệch vì dữ liệu bên ngoài giới hạn của chuỗi thực sự không được xác định. Đó có thể là bất kỳ thứ gì, kể cả những ký tự không phải. Dù sao, +1 cho một câu trả lời được giải thích rõ ràng như vậy :-)
Topher Fangio,


10

Khá thanh lịch khi sử dụng phạm vi vô tận được giới thiệu trong Ruby 2.6:

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

Hy vọng điều đó có ích cho ai đó. Cắt một vài ký tự từ cách tiếp cận tốt nhất cho đến bây giờ và sẽ rất dễ đọc khi phạm vi vô tận thường xuyên được áp dụng.


3

Nếu bạn gán chuỗi cho một biến, bạn có thể sử dụng chiều dài / kích thước

string = 'Austin'
string[1..string.length]  # => ustin
string[1..string.size]    # => ustin
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.