【问题标题】:Ruby idiom for substring from index until end of string从索引到字符串结尾的子字符串的Ruby成语
【发布时间】: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 索引不是超级直观。

标签: ruby string substring slice idioms


【解决方案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(我在问题中的方式)是最好的方式吗?
      猜你喜欢
      • 2016-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-15
      • 2011-09-27
      相关资源
      最近更新 更多