从索引到字符串结尾的子字符串的Ruby成语
Posted
技术标签:
【中文标题】从索引到字符串结尾的子字符串的Ruby成语【英文标题】:Ruby idiom for substring from index until end of string 【发布时间】:2013-01-28 15:46:24 【问题描述】:只是想知道是否有一个 Ruby 习语用于从索引中提取子字符串直到字符串结尾。我知道str[index..-1]
,它通过将范围对象传递给String
的[]
方法来工作,但它有点笨拙。例如,在 python 中,您可以编写 str[index:]
,它会隐式地获取字符串的其余部分。
例子:
s = "hello world"
s[6..-1] # <-- "world"
还有什么比s[6..-1]
更好的吗?
【问题讨论】:
我认为在这种情况下,显式比隐式更好。 @Flauwekeul 为什么 Range 在这方面是个笨蛋? clunk 是什么意思? @Flauwekeul 对不起,我把你和这个问题的主人搞混了。 我认为这很笨拙,因为 -1 索引不是超级直观。 【参考方案1】:从范围中获取字符串:
s = 'hello world'
s[5..s.length - 1] # world
但是,如果你只想得到最后一句话:
'hello world'.split(' ').last # world
【讨论】:
应该是s[5..s.length - 1]
【参考方案2】:
Ruby 2.6 引入了endless ranges,这基本上消除了必须指定结束索引的需要。在你的情况下,你可以这样做:
s = "hello world"
s[6..]
【讨论】:
【参考方案3】:Rails 的 activesupport
库(可以作为独立于 Rails 的 gem 安装)为字符串添加了 from
方法:
> s = "hello world"
"hello world"
> s.from(6)
"world"
https://api.rubyonrails.org/classes/String.html#method-i-from
【讨论】:
【参考方案4】:如果您愿意,这里是“更好的”。您可以扩展 ruby String 类,然后在您的代码中使用此方法。例如:
class String
def last num
self[-num..-1]
end
end
然后:
s = "hello world"
p s.last(6)
【讨论】:
OP 没有请求如何获取最后 X 个字符。他们问如何让字符从 X 到字符串的结尾【参考方案5】:您可以扩展String
类。不确定它是否是 ruby 成语:
class String
def last(n)
self[(self.length - n)..-1]
end
end
【讨论】:
OP 想要从n
开始的最后一个字符。不是最后一个 n
字符。【参考方案6】:
我认为不是。
似乎Range
是更好的方法。
【讨论】:
对不起,你能澄清一下吗?你认为Range
(我在问题中的方式)是最好的方式吗?以上是关于从索引到字符串结尾的子字符串的Ruby成语的主要内容,如果未能解决你的问题,请参考以下文章