列挙子の使用方法と使用場所
列挙子は、コンテナーまたはコレクションを横断する機能を提供するオブジェクトです。列挙子は、コレクション内のデータを読み取るために使用できますが、基礎となるコレクションを変更するために使用することはできません。一方、IEnumerable は、IEnumerator インターフェイスを返す 1 つのメソッド GetEnumerator を定義するインターフェイスです。これにより、次への読み取り専用アクセスが可能になります。コレクション。
Aspose.Cells API には多数の列挙子が用意されていますが、この記事では主に以下の 3 つのタイプについて説明します。
- Cells 列挙者
- 行列挙子
- 列列挙子
列挙子の使用方法
Cells 列挙者
Cells Enumerator にアクセスするにはさまざまな方法があり、アプリケーションの要件に基づいてこれらの方法のいずれかを使用できます。以下は、セル列挙子を返すメソッドです。
上記のメソッドはすべて、初期化されたセルのコレクションを走査できる列挙子を返します。
次のコード例は、Cells コレクションの IEnumerator インターフェイスの実装を示しています。
行列挙子
行列挙子には、RowCollection.GetEnumerator方法。次のコード例は、IEnumerator インターフェイスの実装を示しています。行コレクション.
列列挙子
列列挙子には、ColumnCollection.GetEnumerator方法。次のコード例は、IEnumerator インターフェイスの実装を示しています。コラムコレクション.
列挙子を使用する場所
列挙子を使用する利点について説明するために、リアルタイムの例を見てみましょう。
シナリオ
アプリケーションの要件は、指定されたセル内のすべてのセルを走査することです。ワークシート彼らの価値観を読み取るために。この目標を実現するにはいくつかの方法が考えられます。以下にいくつかを示します。
表示範囲の使用
MaxDataRow と MaxDataColumn の使用
ご覧のとおり、上記のアプローチは両方とも、多かれ少なかれ同様のロジックを使用しています。コレクション内のすべてのセルをループしてセル値を読み取ります。これは、以下で説明するように、さまざまな理由で問題となる可能性があります。
- などの APIマックスロウ, MaxDataRow, MaxColumn, MaxDataColumn & 最大表示範囲対応する統計を収集するには余分な時間が必要です。データ行列 (行 x 列) が大きい場合、これらの API を使用するとパフォーマンスが低下する可能性があります。
- ほとんどの場合、特定の範囲内のすべてのセルがインスタンス化されるわけではありません。このような状況では、行列内のすべてのセルをチェックすることは、初期化されたセルのみをチェックする場合に比べてあまり効率的ではありません。
- ループ内のセルに Cells 行、列としてアクセスすると、範囲内のすべてのセル オブジェクトがインスタンス化され、最終的に OutOfMemoryException が発生する可能性があります。
結論
上記の事実に基づいて、列挙子を使用する必要がある考えられるシナリオは次のとおりです。
- セル コレクションへの読み取り専用アクセスが必要です。つまり、必要なのはセルを検査することだけです。
- 多数のセルを通過する必要があります。
- 初期化されたセル/行/列のみが走査されます。