Wie und wo man Iteratoren verwendet
Ein Objekt einer Iteratorschnittstelle kann verwendet werden, um alle Elemente einer Sammlung zu durchlaufen. Iteratoren können verwendet werden, um die Daten in einer Sammlung zu untersuchen, aber sie können nicht verwendet werden, um die zugrunde liegende Sammlung zu ändern. Um einen Iterator zu verwenden, um den Inhalt einer Sammlung zu durchlaufen, müssen im Allgemeinen die folgenden Schritte ausgeführt werden:
- Rufen Sie einen Iterator für den Beginn der Auflistung ab, indem Sie die Iteratormethode der Auflistung aufrufen.
- Richten Sie eine Schleife ein, die die hasNext-Methode aufruft. Lassen Sie die Schleife durchlaufen, solange die hasNext-Methode true zurückgibt.
- Rufen Sie innerhalb der Schleife jedes Element ab, indem Sie die nächste Methode aufrufen.
Aspose.Cells APIs bieten eine Reihe von Iteratoren, aber dieser Artikel behandelt hauptsächlich die drei unten aufgeführten Typen.
- Cells Iterator
- Zeilen-Iterator
- Spalten-Iterator
Verwendung von Iteratoren
Cells Iterator
Es gibt verschiedene Möglichkeiten, auf den Iterator der Zellen zuzugreifen, und je nach Anwendungsanforderungen kann jede dieser Methoden verwendet werden. Hier sind die Methoden, die den Iterator der Zellen zurückgeben.
- Cells.iterator
- Row.iterator
- Range.iterator
Alle oben genannten Methoden geben den Iterator zurück, der es ermöglicht, die Sammlung von Zellen, die initialisiert wurden, zu durchlaufen.
Das folgende Codebeispiel veranschaulicht die Implementierung der Iterator-Klasse für eine Cells-Auflistung.
Zeilen-Iterator
Auf den Rows-Iterator kann zugegriffen werden, während die RowCollection.iterator-Methode verwendet wird. Das folgende Codebeispiel veranschaulicht die Implementierung der Iterator for RowCollection-Klasse.
Spalten-Iterator
Auf den Columns-Iterator kann mit der ColumnCollection.iterator-Methode zugegriffen werden. Das folgende Codebeispiel veranschaulicht die Implementierung der Iterator for ColumnCollection-Klasse.
Wo man Iteratoren verwendet
Um die Vorteile der Verwendung von Iteratoren zu erörtern, nehmen wir ein Echtzeitbeispiel.
Szenario
Eine Anwendungsanforderung besteht darin, alle Zellen in einem bestimmten Arbeitsblatt zu durchlaufen, um ihre Werte zu lesen. Es könnte mehrere Möglichkeiten geben, dieses Ziel umzusetzen. Einige werden unten demonstriert.
Anzeigebereich verwenden
Verwenden von MaxDataRow & MaxDataColumn
Wie Sie feststellen können, verwenden beide oben genannten Ansätze eine mehr oder weniger ähnliche Logik, das heißt; Schleife über alle Zellen in der Sammlung, um die Zellenwerte zu lesen. Dies könnte aus einer Reihe von Gründen problematisch sein, wie unten diskutiert wird.
- Die APIs wie MaxRow, MaxDataRow, MaxColumn, MaxDataColumn und MaxDisplayRange benötigen zusätzliche Zeit, um die entsprechenden Statistiken zu sammeln. Falls die Datenmatrix (Zeilen x Spalten) groß ist, kann die Verwendung dieser APIs zu Leistungseinbußen führen.
- In den meisten Fällen werden nicht alle Zellen in einem bestimmten Bereich instanziiert. In solchen Situationen ist es nicht so effizient, jede Zelle in der Matrix zu prüfen, als nur die initialisierten Zellen zu prüfen.
- Der Zugriff auf eine Zelle in einer Schleife als Cells.get(rowIndex, columnIndex) bewirkt, dass alle Zellobjekte in einem Bereich instanziiert werden, was schließlich zu OutOfMemoryError führen kann.
Fazit
Basierend auf den oben genannten Fakten sind im Folgenden die möglichen Szenarien aufgeführt, in denen Iteratoren verwendet werden sollten.
- Nur-Lese-Zugriff auf die Zellsammlung ist erforderlich, das heißt; Voraussetzung ist, dass nur die Zellen inspiziert werden.
- Eine große Anzahl von Zellen muss durchquert werden.
- Es sollen nur initialisierte Zellen/Zeilen/Spalten durchlaufen werden.