n次元ループを1次元ループに変換する (2)

先日のflatten_forは、n次元ループを1次元ループに変換と考えたが、2つ以上のリスト(やイテレータ)を組み合わせて回す場合、以下の2通り存在する。

  • 平行に組み合わせて回す (zipやenumerate)
  • 階層的に組み合わせて回す (flatten_for)


2番目の階層的に組み合わせる処理は、例えば小町算などで組み合わせの全リストが欲しい場合に一気に作れば、後は処理するだけとなる。かなり便利だと思うが、組み込み関数や標準ライブラリに存在しない。リストを平坦化する関数も存在しないし、結構欲しい処理が組み込まれていない気がする。Rubyにはflatten_forに当たるメソッドがあるのだろうか。