【发布时间】:2013-11-26 07:15:12
【问题描述】:
我知道在 Ruby 中执行 for 循环的惯用方法是使用像 .each 这样的枚举器,但我遇到了一个问题:我想遍历数组的子集并修改那些元素。用ary[0..2] 或.slice(0..2) 之类的子集调用.map! 似乎并没有这样做;大概是因为那个切片操作符正在创建一个新数组?
使用 for 而不是迭代器的期望行为:
iter_ind = [2,3,4]
my_ary = [1,3,5,7,9,11]
for j in iter_ind
my_ary[j] = my_ary[j] + 1
# some other stuff like an exchange operation maybe
end
=> [1, 3, 6, 8, 10, 11]
不起作用的事情:
irb(main):032:0> ar[2..4].map! {|el| el = el+1}
=> [6, 8, 10]
irb(main):033:0> ar
=> [1, 3, 5, 7, 9, 11]
irb(main):034:0> ar.slice(2..4).map! {|el| el = el+1}
=> [6, 8, 10]
irb(main):035:0> ar
=> [1, 3, 5, 7, 9, 11]
irb(main):036:0> ar[2..4].collect! {|el| el = el+1}
=> [6, 8, 10]
irb(main):037:0> ar
=> [1, 3, 5, 7, 9, 11]
【问题讨论】:
-
感谢编辑,我一定是不小心点击了建议的标签。
标签: ruby arrays loops iterator