如果我想交错的一组中的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
但有一个更好的“红宝石”的方式,可能使用zip或调换或一些这样?
谢谢,没有考虑args.map(:大小)。事实上,我以前从未见过这种方法。 max_length.times比我的for循环更清洁。 – ChrisInEdmonton 2010-08-27 20:55:36
我曾想过用nil填充较短的数组,然后将它们交错,然后压缩nils。这很好,当且仅当你可以确定你的源数组中没有任何nil。 :) – ChrisInEdmonton 2010-08-27 21:07:33