For Each Element…End-Anweisung (FPScript)

09.03.2021

Wiederholt eine Reihe von Anweisungen für alle Elemente einer Liste.

Syntax

[Parallel] For Each Element Zähler In Liste Do

   [Anweisungen]

End

Die Syntax der For Each Element...End-Anweisung besteht aus folgenden Teilen:

Teil

Beschreibung

Zähler

Variable, die als Schleifenzähler verwendet wird. Den Schleifenzähler müssen Sie nicht mit Dim deklarieren.

Liste

Die Liste, deren Elemente durchgezählt werden sollen.

Anweisungen

Eine oder mehrere Anweisungen, die für jedes Element in der Liste ausgeführt werden.

Anmerkungen

Der For Each Element-Block wird ausgeführt, wenn sich mindestens ein Element in Liste befindet. In diesem Fall führt das Programm alle Anweisungen in der Schleife mit Zähler gleich Null aus. Die Schleife wird für alle Elemente in Liste wiederholt wobei Zähler die Werte von Null bis zur Anzahl der Elemente minus Eins annimmt. Dann verlässt das Programm die Schleife und setzt die Ausführung mit der Anweisung fort, die auf die End-Anweisung folgt.

Sie können den Wert von Zähler zwar innerhalb einer Schleife ändern, dies erschwert jedoch das Verständnis und das Testen des Codes. Zähler wird innerhalb der Schleife häufig zum Indizieren eines Elementes aus Liste verwendet.

Wenn Sie das Schlüsselwort Parallel voranstellen, werden in den Editionen Professional und Developer Suite von FlexPro die Schleifendurchläufe nicht nacheinander sondern gleichzeitig durchgeführt. FlexPro verteilt die Ausführung dann auf maximal so viele gleichzeitig ablaufende Threads, wie Prozessorkerne vorhanden sind. Dies führt zu einer entsprechenden Vervielfachung der Verarbeitungsgeschwindigkeit solange diese nicht durch andere Faktoren, wie z. B. das Nachladen großer Datensätze von der Festplatte, beschränkt wird.

Die parallele Ausführung hat einige Konsequenzen, die Sie beachten müssen:

Für den Schleifenzähler und für lokale Variable, die Sie innerhalb des Parallel For Each Element-Blocks deklarieren, wird für jeden Thread eine unabhängige Instanz angelegt. Zugriff auf eine solche Variable von außerhalb des Blocks ist nicht zulässig.

Eine lokale Variable, die Sie oberhalb des Parallel For Each Element-Blocks deklarieren, wird von allen Threads gemeinsam genutzt. Wenn Sie innerhalb des Blocks schreibend auf eine solche Variable zugreifen, ändert sich deren Wert abrupt auch für die anderen Threads.

Da die Reihenfolge der Schleifendurchläufe unbestimmt ist, können Konzepte wie das Aufsammeln von Einzelergebnissen mit dem Bündelungs-Operator nicht verwendet werden. Stattdessen sollten Sie das Ergebnis vor der Schleife ausreichend dimensionieren und dann mittels indizierter Zuweisung die Einzelergebnisse eintragen.

In einer parallelen Schleife ist die Break-Anweisung nicht zulässig.

Verfügbarkeit

FlexPro View, Basic, Professional, Developer Suite

Beispiel

Das folgende Beispiel liefert eine Liste mit den Ableitungen der Signale in der als Argument übergebenen Liste:

Arguments ArgList

Dim ResultList = List(ArgList, "Derivative")

Parallel For Each Element i In ArgList Do

    ResultList. = Derivative(ArgList.)

End

ResultList

Siehe auch

For Each Column...End-Anweisung

For Each Row...End-Anweisung

For Each Value...End-Anweisung

For...End-Anweisung

While...End-Anweisung

Do...While-Anweisung

Artikel teilen oder als Email versenden:

Diese Beiträge könnten Sie ebenfalls interessieren