それで...これは簡単ではないのはどうですか?
イテレータが必要です。最後の配列を反復処理する必要があります。その配列の最後に到達したら、最後から 2 番目の配列の現在の位置をインクリメントし、最後の配列の先頭に戻ります。
C#yield return
構文を使用した疑似コード:
foreach n1 in a1
foreach n2 in a2
foreach n3 in a3
yield return (n1, n2, n3)
編集: セットの数が異なる場合は、何らかの形式の再帰を使用できます。
function next(list)
firstArray = list.first
iterator = iterator(list.rest)
if !iterator
foreach i in firstArray
yield return i
else
foreach i in firstArray
while (iterator.hasNext)
yield return (i, iterator.next)
長さ 1 のリストが渡されたときの動作を考えてから、長さ 2 のリストの動作を考えて、それが実際に機能することを確認してください。