如果我想交錯的一組中的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