如何在Ruby中将地图应用于2D数组的元素?

时间:2014-03-17 18:36:48

标签: ruby

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]]

2 个答案:

答案 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]]