イテレータのイテレータをフラットにするなど、フラットにすることの意味を知りたいです。教えて頂けますか?C/Java/Python のイディオムはありますか?
2 に答える
このコンテキストでは、フラット化とは、ネストを削除することを意味します。たとえば、整数の配列の配列 (各要素が配列である配列) はネストされています。それを平坦化すると、同じ値を同じ順序で含む整数の配列が得られますが、複数の配列に分割されるのではなく、単一の配列内で互いに隣り合っています: [[1 2] [3 4]] -> [1 2 3 4]
. イテレータ、他のコレクション、およびより深いネスト (文字列のイテレータ セットの配列の配列) との同じ違い。
イディオムに関しては、それほど多くはありません。一般的なタスクではなく、多くの場合単純です。通常の配列 (ネストされた配列はすべて同じサイズ) の場合、nested[i][j]
は と同等であることに注意してくださいnested[i * INNER_ARRAY_SIZE + j]
。これは、ネストを避けるために使用されることがあります。特に、配列を参照型として扱い、ネストする場合に個別に割り当てられた多くの配列が必要な言語で使用されます。Python では、イテラブルを でフラット化できますitertools.chain(*iterable_of_iterables)
。
平坦化とは、シーケンスタイプのネストを削除することを意味します。Pythonはitertools.chain(*iterables)
この目的のために提供しています(http://docs.python.org/library/itertools.html#itertools.chain)。