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

Ruby 用另一个数组的元素替换数组中的所有零,ruby,algorithm,sorting,sudoku,Ruby,Algorithm,Sorting,Sudoku,假设我有这样一个数组: array_1 = [0, 0, 1, 2, 3, 0] array_2 = [4, 5, 6] 还有一个是这样的: array_1 = [0, 0, 1, 2, 3, 0] array_2 = [4, 5, 6] 如何创建这样的数组,使数组_1中的每个0都被数组_2的第一个和后续元素替换 [4,5,1,2,3,6] 也就是说,每次我们在第一个数组中遇到0,我们都希望用array\u 2的结果来替换它。shift您可以这样做,在遇到0时迭代并移位 array_

假设我有这样一个数组:

array_1 =  [0, 0, 1, 2, 3, 0]
array_2 = [4, 5, 6]
还有一个是这样的:

array_1 =  [0, 0, 1, 2, 3, 0]
array_2 = [4, 5, 6]
如何创建这样的数组,使
数组_1
中的每个0都被
数组_2
的第一个和后续元素替换

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


也就是说,每次我们在第一个数组中遇到
0
,我们都希望用
array\u 2的结果来替换它。shift

您可以这样做,在遇到0时迭代并移位

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

这一个较短,但移位方法将在适当位置修改数组_2

array_1.map {|x| x == 0 ? array_2.shift : x}
下面使用带有外部迭代的枚举器对象,并且不会修改任何原始数组

e = array_2.each
array_1.map {|x| x == 0 ? e.next : x}

好吧,你有一半的答案。使用
map
shift
,并在顶部添加一些条件。这是不正确的。问题是需要创建一个新的数组(而不是变异
array\u 1
)。此外,尽管OP提到了
array\u 2.shift
,但仍应注意,这也会变异
array\u 2
。即使OP提到了array\u 2.shift,仍应注意,这会变异
array\u 2