Ruby字符串切片索引: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

Answers:


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年


10

使用Ruby 2.6中引入的无尽范围,相当优雅:

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

希望对某人有用。到目前为止,从最佳方法中删减了两个字符,一旦定期采用无穷范围,它们将非常可读。


3

如果将字符串分配给变量,则可以使用长度/大小

string = 'Austin'
string[1..string.length]  # => ustin
string[1..string.size]    # => ustin
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.