如何使用负索引到正索引进行字符串索引?

时间:2013-06-04 18:33:55

标签: ruby string

对于给定的字符串:

string = "hello world"

我想使用索引返回一个字符串:

string2 = string[-4..2]
string2 = "orldhel"

为什么红宝石会回来:

string2 = ""

PS - 我将在索引的开头和结尾迭代1,初始字符串索引可能不一定是负数。

1 个答案:

答案 0 :(得分:3)

单一范围内不可能。但您可以将其拆分为两个有效范围。

string = "hello world"

string[-4..-1] + string[0..2] # => "orldhel"

您可以编写一个接受单个反转范围的函数并执行此操作。我会把它留给你作为练习。

更新(不要在实际代码中使用它)

class String
  alias_method :old_brackets, :[]

  def [](idx)
    if idx.is_a?(Range) && idx.begin < 0 && idx.end > 0
      old_brackets(idx.begin..-1) + old_brackets(0..idx.end)
    else
      old_brackets(idx)
    end
  end
end

string = "hello world"

string[-4..2] # => "orldhel"