在"each"循环中覆盖数组的元素

cie*_*bor 1 ruby each overriding

a = [1, 2, 3]
a.each do |x| x+=10 end
Run Code Online (Sandbox Code Playgroud)

在此操作之后,阵列a仍然是[1, 2, 3].如何将其转换为[11, 12, 13]

Dyl*_*kow 7

使用collect!方法:

a = [1, 2, 3]
a.collect!{ |x| x + 10 }
Run Code Online (Sandbox Code Playgroud)


Dig*_*oss 5

有两种通用的解决方案:

势在必行的对象变异代码

a.map! { |x| x + 10 }
Run Code Online (Sandbox Code Playgroud)

几乎功能性的解决方案

a = a.map { |x| x + 10 }
Run Code Online (Sandbox Code Playgroud)

两种技术都有它们的位置.