Ruby newbie here ...我想应用Array.map!对于2D数组的元素,但是执行类似下面示例的操作会将map应用于数组的每个元素。
array = Array.new(3, Array.new(3, 0))
array[2].map! { |e| e + 1 }
print array
这给了我[[1, 1, 1], [1, 1, 1], [1, 1, 1]]
,而我希望更像[[0, 0, 0], [0, 0, 0], [1, 1, 1]]
。
答案 0 :(得分:0)
您必须映射每个,例如:
modified = array.map{ |sub| sub.map{ |e| e+1 } }
如果你想原地变异:
array.each{ |sub| sub.map!{ |e| e+1 } }
但是,您没有正确创建初始2D阵列。你想要:
array = Array.new(3){ Array.new(3) }
...以便不共享子条目。有关详细信息,请参阅上面评论中标记为重复的答案。
答案 1 :(得分:0)
就像@Phrogz所说,你只需要正确初始化。
然后你可以使用你的方法
array = Array.new(3){ Array.new(3,0)}
#=> [[0, 0, 0], [0, 0, 0], [0, 0, 0]]
array[2].map!{|e| e + 1}
#=> [1, 1, 1]
array
#=> [[0, 0, 0], [0, 0, 0], [1, 1, 1]]