我有两个数组:
a = [nil, 1, nil]
b = [4, 5, 6]
Run Code Online (Sandbox Code Playgroud)
我想用第二个数组中的相关元素替换第一个数组中的nil元素:
[4, 1, 6]
Run Code Online (Sandbox Code Playgroud)
最好的方法是什么?
您可以使用zip和||操作员执行此操作:
result = a.zip(b).map{ |x,y| x || y }
Run Code Online (Sandbox Code Playgroud)
如果要完全替换元素nil,而不是false元素:
a.map.with_index { |e, i| e.nil? ? b[i] : e }
# => [4, 1, 6]
Run Code Online (Sandbox Code Playgroud)
您可以使用
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不移除元素.