数组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 是一个解决方案,但没有任何分配,有没有办法做到这一点?
这是一种方法:
xs.fill(5..-1) { |i| xs[i].odd? }
#=> 0 1 2 3 4 true false true false true
Run Code Online (Sandbox Code Playgroud)