在循环中更改数组中的条目

pin*_*ngu 9 ruby arrays

arr = ["red","green","blue","yellow"]

arr.each do |colour|
  if colour == "red"
    colour = "green"
  end
end

puts arr.inspect
Run Code Online (Sandbox Code Playgroud)

以上代码输出:

["red", "green", "blue", "yellow"]
Run Code Online (Sandbox Code Playgroud)

但为什么不呢?

["green", "green", "blue", "yellow"]
Run Code Online (Sandbox Code Playgroud)

我认为颜色是对数组中当前元素的引用,无论我做了什么都会影响该数组元素?

sfl*_*ter 5

当您在arr.each块内时,colour变量将绑定到arr数组中的一个对象.

但是,只要colour = "green"在块中进行赋值,现在colour变量就绑定到一个新对象(即一个值为的String "green"),原始文件arr保持不受影响.

实现您所谈论的内容的一种方法是:

arr.each_index do |i|
  arr[i] = "green" if arr[i] == "red"
end
Run Code Online (Sandbox Code Playgroud)

它直接操纵数组.

  • `.map`可能会更好. (3认同)
  • 同意,`arr.map {| x | x =="红色"?"绿色":x}`也可以正常工作. (3认同)