用另一个数组的元素替换数组中的所有零

Replace all zeros in array with elements of another array

假设我有一个这样的数组:

array_1 =  [0, 0, 1, 2, 3, 0]

还有一个是这样的:

array_2 = [4, 5, 6]

如何创建这样的数组,以便 array_1 中的每个 0 都被 array_2 的第一个和后续元素替换?:

[4, 5, 1, 2, 3, 6]

也就是每次在第一个数组中遇到0,我们想用array_2.shift.

的结果替换它

你可以做这样的事情,当你遇到 0

array_1.each_with_index do |val, i|
  array_1[i] = array_2.shift if val == 0
end

这个比较短,但是 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}