在 ruby 中压缩不均匀数组

Zipping uneven arrays in ruby

我有两个不均匀数组:

a = [1,2,3,4,5,6,7,8,9,10]
b = ['d','e','f','g','h','i','j']

我想绑定它们,以便返回的对象如下所示:

result = [[nil, 1], [nil, 2], [nil, 3], ["d", 4], ["e", 5], ["f", 6], ["g", 7],
["h", 8], ["i", 9], ["j", 10]] 

zip 方法将不起作用,因为它通过将元素排列到前面来起到相反的作用。到目前为止我有:

def bind(a,b,ac=a.count,bc=b.count)
  distance = ac - bc < 0 ? bc - ac : ac - bc
  min = ac > bc ? b : a
  max = ac > bc ? a : b 
  distance.times { min.unshift(nil) }
  return min.zip(max)
end

ruby 是否有解决此问题的方法(或更快的解决方法)?

这个呢?

a.reverse.zip(b.reverse).reverse.map(&:reverse)

假设a.size >= b.size

([nil]*(a.size-b.size)).concat(b).zip(a)
  #=> [[nil, 1], [nil, 2], [nil, 3], ["d", 4], ["e", 5],
  #    ["f", 6], ["g", 7], ["h", 8], ["i", 9], ["j", 10]] 

[([nil]*(a.size-b.size)).concat(b), a].transpose

两个数组大小相同时的方法Enumerable#zip and Array#transpose are yin and yang

虽然非常接近 Cary 的解决方案。我发现这更具可读性。

missing_elements = Array.new(a.size-b.size)
p (missing_elements+b).zip(a)