【问题标题】:Replace all zeros in array with elements of another array用另一个数组的元素替换数组中的所有零
【发布时间】:2016-11-11 12:04:58
【问题描述】:

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

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的结果替换它。

【问题讨论】:

  • 嗯,你有一半的答案。使用mapshift,并在顶部添加一些条件。

标签: ruby algorithm sorting sudoku


【解决方案1】:

你可以做这样的事情,当你遇到一个 0 时迭代和移位

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

【讨论】:

  • 这是不正确的。需要创建一个新数组的问题(而不是变异array_1)。此外,尽管 OP 提到了array_2.shift,但仍然应该注意的是,这也会使array_2 发生变异。
【解决方案2】:

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

【讨论】:

  • 虽然 OP 提到了array_2.shift,但仍然应该注意,这会改变array_2
猜你喜欢
  • 1970-01-01
  • 2013-07-04
  • 1970-01-01
  • 2019-12-20
  • 2023-01-19
  • 2012-11-13
  • 1970-01-01
  • 1970-01-01
  • 2021-12-12
相关资源
最近更新 更多