Как чередовать массивы разной длины в Ruby
Если я хочу чередовать набор массивов в Ruby, и каждый массив имеет одинаковую длину, мы можем сделать так:
a.zip(b).zip(c).flatten
Однако, как мы решаем эту проблему, если массивы могут быть разных размеров?
Мы могли бы сделать что-то вроде:
def interleave(*args)
raise 'No arrays to interleave' if args.empty?
max_length = args.inject(0) { |length, elem| length = [length, elem.length].max }
output = Array.new
for i in 0...max_length
args.each { |elem|
output << elem[i] if i < elem.length
}
end
return output
end
Но есть ли лучший способ Ruby, возможно, с использованием zip или транспонирования или чего-то подобного?