Schleifen: for...in-Ausdruck
Dieses Schleifenkonstrukt wird zum Durchlaufen der Übereinstimmungen eines Musters in einer aufzählbaren Auflistung verwendet, z. B. für eine Reihe von Ausdrücken, eine Sequenz, Liste, ein Array oder ein anderes Konstrukt, das Enumeration unterstützt.
Syntax
for pattern in enumerable-expression do
body-expression
Bemerkungen
Der for...in
-Ausdruck kann mit der for each
-Anweisung in anderen .NET-Sprachen verglichen werden, weil er verwendet wird, um die Werte in einer aufzählbaren Sammlung zu durchlaufen. for...in
unterstützt jedoch auch Musterabgleich über die Sammlung, anstatt nur Iteration über die gesamte Sammlung durchzuführen.
Der aufzählbare Ausdruck kann als aufzählbare Collection oder mithilfe des ..
-Operators angegeben werden. Aufzählbare Sammlungen umfassen Listen, Sequenzen, Arrays, Mengen, Zuordnungen usw. Jeder Typ, der System.Collections.IEnumerable
implementiert, kann verwendet werden.
Wenn Sie einen Bereich mithilfe des ..
-Operators ausdrücken, können Sie die folgende Syntax verwenden.
start .. finish
Sie können auch eine Version verwenden, die wie im folgenden Code ein Inkrement namens skip enthält.
start .. skip .. finish
Wenn der skip-Wert nicht angegeben ist, wird der nächste in der Collection generierte Wert um 1 erhöht. Wenn ein skip-Wert angegeben wird, wird er um diesen Wert erhöht.
Werte, die im Muster übereinstimmen, können auch im Textkörperausdruck verwendet werden.
In den folgenden Codebeispielen wird die Verwendung des for...in
-Ausdrucks veranschaulicht.
// Looping over a list.
let list1 = [ 1; 5; 100; 450; 788 ]
for i in list1 do
printfn "%d" i
Die Ausgabe lautet wie folgt.
1
5
100
450
788
Im folgenden Beispiel wird gezeigt, wie eine Sequenz in einer Schleife durchlaufen und ein Tupelmuster anstelle einer einfachen Variablen verwendet wird.
let seq1 = seq { for i in 1 .. 10 -> (i, i*i) }
for (a, asqr) in seq1 do
printfn "%d squared is %d" a asqr
Die Ausgabe lautet wie folgt.
1 squared is 1
2 squared is 4
3 squared is 9
4 squared is 16
5 squared is 25
6 squared is 36
7 squared is 49
8 squared is 64
9 squared is 81
10 squared is 100
Das folgende Beispiel zeigt, wie eine Schleife über einen einfachen Integerbereich ausgeführt wird.
let function1() =
for i in 1 .. 10 do
printf "%d " i
printfn ""
function1()
Die Ausgabe von function1 sieht wie folgt aus.
1 2 3 4 5 6 7 8 9 10
Das folgende Beispiel zeigt, wie Sie einen Bereich mit einem skip-Wert von 2 in einer Schleife durchlaufen, der jedes andere Element des Bereichs enthält.
let function2() =
for i in 1 .. 2 .. 10 do
printf "%d " i
printfn ""
function2()
Die Ausgabe von function2
lautet wie folgt.
1 3 5 7 9
Im folgenden Beispiel wird gezeigt, wie ein Zeichenbereich verwendet wird.
let function3() =
for c in 'a' .. 'z' do
printf "%c " c
printfn ""
function3()
Die Ausgabe von function3
lautet wie folgt.
a b c d e f g h i j k l m n o p q r s t u v w x y z
Im folgenden Beispiel wird gezeigt, wie ein negativer skip-Wert für eine umgekehrte Iteration verwendet wird.
let function4() =
for i in 10 .. -1 .. 1 do
printf "%d " i
printfn " ... Lift off!"
function4()
Die Ausgabe von function4
lautet wie folgt.
10 9 8 7 6 5 4 3 2 1 ... Lift off!
Der Anfang und das Ende des Bereichs können auch Ausdrücke sein, z. B. Funktionen, wie im folgenden Code gezeigt.
let beginning x y = x - 2*y
let ending x y = x + 2*y
let function5 x y =
for i in (beginning x y) .. (ending x y) do
printf "%d " i
printfn ""
function5 10 4
Die Ausgabe von function5
mit dieser Eingabe lautet wie folgt.
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
Das nächste Beispiel zeigt die Verwendung eines Platzhalterzeichens (_), wenn das Element in der Schleife nicht benötigt wird.
let mutable count = 0
for _ in list1 do
count <- count + 1
printfn "Number of elements in list1: %d" count
Die Ausgabe lautet wie folgt.
Number of elements in list1: 5
Note
Sie können for...in
in Sequenzausdrücken und anderen Berechnungsausdrücken verwenden. In diesem Fall wird eine angepasste Version des for...in
-Ausdrucks verwendet. Weitere Informationen finden Sie unter Sequenzen, Asynchrone Ausdrücke, Taskausdrücke und Berechnungsausdrücke.