Ruby 如何在迭代时更改数组的元素部分

Ruby 如何在迭代时更改数组的元素部分,ruby,Ruby,数组xs由0到9的数字组成: xs = [*0..9] 测试奇偶校验,并将结果存储到位: xs.map!(&:odd?) puts xs.join(" ") # => false, true, ..., true xs按预期更改。但我只想改变数组的一部分 xs[5..-1].map!(&:odd?) puts xs.join(" ") # => 0 1 2 3 4 5 6 7 8 9 我猜slice操作会返回一个副本。或者其他一些原因 xs[…]=xs[…]。

数组
xs
由0到9的数字组成:

xs = [*0..9]
测试奇偶校验,并将结果存储到位:

xs.map!(&:odd?)
puts xs.join(" ") 
# => false, true, ..., true
xs
按预期更改。但我只想改变数组的一部分

xs[5..-1].map!(&:odd?)
puts xs.join(" ")
# => 0 1 2 3 4 5 6 7 8 9
我猜
slice
操作会返回一个副本。或者其他一些原因


xs[…]=xs[…]。某些操作是一种解决方案,但有没有办法不用赋值就完成此操作?

以下是一种方法:

xs.fill(5..-1) { |i| xs[i].odd? }
#=> 0 1 2 3 4 true false true false true

以下是一种方法:

xs.fill(5..-1) { |i| xs[i].odd? }
#=> 0 1 2 3 4 true false true false true

这太优雅了
fill
——好像Ruby中基本上有一个方法可以处理所有的事情。它看起来很优雅,但它做了其他的事情<代码>填充
将元素的索引传递给块,而不是元素本身。@Stefan感谢您指出错误。更新了答案,这太优雅了
fill
——好像Ruby中基本上有一个方法可以处理所有的事情。它看起来很优雅,但它做了其他的事情<代码>填充将元素的索引传递给块,而不是元素本身。@Stefan感谢您指出错误。更新了答案“迭代时”是什么意思?你说的“迭代时”是什么意思?