说我有这样的阵列:
array_2 = [4, 5, 6]
和另一个像这样:
array_1
如何创建这样的数组,以便array_2
中的每个0都被[4, 5, 1, 2, 3, 6]
的第一个和后续元素替换?:
0
也就是说,每次我们在第一个数组中遇到array_2.shift
时,我们都希望将其替换为{{1}}的结果。
答案 0 :(得分:5)
这个更短但 shift 方法会在原地修改array_2。
array_1.map {|x| x == 0 ? array_2.shift : x}
以下使用具有外部迭代的枚举器对象,不会修改任何原始数组。
e = array_2.each
array_1.map {|x| x == 0 ? e.next : x}
答案 1 :(得分:1)
你可以做这样的事情,当遇到0
时迭代和转移array_1.each_with_index do |val, i|
array_1[i] = array_2.shift if val == 0
end