For Each Element…End-Anweisung (FPScript)
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