传递指数范围

时间:2010-04-26 18:14:14

标签: ruby indexing range

我目前正试图弄清楚如何将索引范围作为字符串传递,但到目前为止还没有任何运气。这是我正在尝试做的一个例子:

pos = %w{1 2..4}
values = %{x cat}
test_string = "This is a test with a string."

test_string[pos[1]] = values[1]

我知道我可以用split或类似的东西来分解它,但我真的想知道如何直接传递这个值。我以为我可以用eval完成它,但到目前为止我一直没有运气。非常感谢任何帮助,谢谢!

3 个答案:

答案 0 :(得分:0)

不确定为什么你想这样做,但你可以这样做:

%Q{1 #{(2..4).to_a.join(' ')}}.split

注意:如果你试图操纵你想要的测试字符串pos[0].chr(数组从0开始,.chr将得到ASCII值)。

编辑:必须有更好的方法来实现您想要做的事情,向我们提供您需要的更多信息。类似以下内容可能就足够了:

[1] + (2..4).to_a

Edit2:根据您提供的信息尝试以下

pos  = [15..22, 165..172] #array of ranges
dates = %w{20100426 20100430}
pos.each_with_index {|range, i| 
   test_string[range] = dates[i]
}

答案 1 :(得分:0)

这里的问题是%w会按原样转换为字符串。在控制台中尝试它,你会看到:

>> %w{1 2..4}
=> ["1", "2..4"]

转换前不会扩大范围。

答案 2 :(得分:0)

你想做什么,在这里?您尝试使用的索引是字符串而不是整数,因此无效 如果您可以解释您计划去哪里,我们可以建议另一条路线吗?