使用另一个数组的元素替换数组中的nils的最佳方法

Ily*_*rov 3 ruby arrays

我有两个数组:

a = [nil, 1, nil]
b = [4, 5, 6]
Run Code Online (Sandbox Code Playgroud)

我想用第二个数组中的相关元素替换第一个数组中的nil元素:

[4, 1, 6]
Run Code Online (Sandbox Code Playgroud)

最好的方法是什么?

Cri*_*scu 6

您可以使用zip||操作员执行此操作:

result = a.zip(b).map{ |x,y| x || y } 
Run Code Online (Sandbox Code Playgroud)

  • 请注意,如果`a`包含`false`s,则会失败. (4认同)

Ily*_*lya 5

如果要完全替换元素nil,而不是false元素:

a.map.with_index { |e, i| e.nil? ? b[i] : e }
# => [4, 1, 6]
Run Code Online (Sandbox Code Playgroud)


Sag*_*dya 5

您可以使用

a.zip(b).map(&:compact).map(&:first) #=> [4, 1, 6]
Run Code Online (Sandbox Code Playgroud)

脚步:

a.zip(b)
#=> [[nil, 4], [1, 5], [nil, 6]]
a.zip(b).map(&:compact)
#=> [[4], [1, 5], [6]]
a.zip(b).map(&:compact).map(&:first)
#=> [4, 1, 6]
Run Code Online (Sandbox Code Playgroud)

凭借Array#compact这种方法,nil仅从拉链对中移除元素,即false不移除元素.

  • `a.zip(b).map {| e | e.compact [0]}`2次迭代而不是3次:) (2认同)