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

del*_*lta 1 ruby

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

xs = [*0..9]
Run Code Online (Sandbox Code Playgroud)

测试奇偶校验,并将结果存储到位:

xs.map!(&:odd?)
puts xs.join(" ") 
# => false, true, ..., true
Run Code Online (Sandbox Code Playgroud)

xs按预期改变了.但我只是想改变数组的一部分

xs[5..-1].map!(&:odd?)
puts xs.join(" ")
# => 0 1 2 3 4 5 6 7 8 9
Run Code Online (Sandbox Code Playgroud)

我想这个slice操作会返回一个副本.或者其他一些原因.

xs[...] = xs[...].some_operation 是一个解决方案,但没有任何分配,有没有办法做到这一点?

Wan*_*ker 8

这是一种方法:

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

  • 它看起来很优雅,但它还有其他功能.`fill`将元素的*index*传递给块,而不是元素本身. (2认同)