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
。