Si je veux entrelacer un ensemble de tableaux en Ruby, et chaque tableau a été la même longueur, on peut le faire que:Comment imbriquer des tableaux de longueur différente dans Ruby
a.zip(b).zip(c).flatten
Cependant, comment pouvons-nous résoudre ce problème si les tableaux peuvent être de tailles différentes?
Nous pourrions faire quelque chose comme:
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
Mais est-il une meilleure façon « Ruby », en utilisant peut-être zip ou transposer ou un tel?
Merci, n'a pas considéré args.map (&: taille). En fait, je n'avais pas vu cette approche auparavant. Le paramètre max_length.times est aussi plus propre que mon for-loop. – ChrisInEdmonton
Et j'avais pensé à rembourrer les réseaux plus courts avec des nils, les entrelacer, puis compacter les nils. C'est génial si et seulement si vous pouvez être sûr que vos tableaux sources n'ont pas de Nils en eux. :) – ChrisInEdmonton