Schleifen: for...in-Ausdruck (F#)
Dieses Schleifenkonstrukt wird verwendet, um die Übereinstimmungen eines Musters in einer aufzählbaren Auflistung, z. B. einem Bereichsausdruck, einer Sequenz, einer Liste, einem Array oder einem anderen Konstrukt, das Enumeration unterstützt, zu durchlaufen.
for pattern in enumerable-expression do
body-expression
Hinweise
Der for…in-Ausdruck ist mit der for each-Anweisung in anderen .NET-Sprachen vergleichbar, da er zum Durchlaufen einer Schleife über den Werten in einer aufzählbaren Auflistung verwendet wird.for…in unterstützt jedoch auch Mustervergleich über der Auflistung und nicht nur die Iteration der gesamten Auflistung.
Der aufzählbare Ausdruck kann als aufzählbare Auflistung oder mit dem ..-Operator als Bereich für einen ganzzahligen Typ angegeben werden.Aufzählbare Auflistungen umfassen Listen, Sequenzen, Arrays, Sätze, Zuordnungen usw.Jeder Typ kann verwendet werden, der IEnumerable implementiert.
Wenn Sie mit dem ..-Operator einen Bereich angeben, können Sie die folgende Syntax verwenden.
start ..finish
Sie können auch eine Version verwenden, die ein als Schritt bezeichnetes Inkrement enthält, wie im folgenden Code.
start ..skip ..finish
Wenn Sie ganzzahlige Bereiche und eine einfache Zählervariable als Muster verwenden, ist das typische Verhalten, dass die Zählervariable bei jeder Iteration um 1 erhöht wird. Wenn jedoch der Bereich einen Schrittwert enthält, wird der Zähler stattdessen um den Schrittwert erhöht.
Mit dem Muster übereinstimmende Werte können auch im Body-Ausdruck 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 Schleife über einer Sequenz durchlaufen wird und wie ein Tupelmuster statt 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
Im folgenden Beispiel wird gezeigt, wie eine Schleife über einem einfachen ganzzahligen Bereich durchlaufen wird.
let function1() =
for i in 1 .. 10 do
printf "%d " i
printfn ""
function1()
Die Ausgabe von function1 lautet wie folgt.
1 2 3 4 5 6 7 8 9 10
Im folgenden Beispiel wird gezeigt, wie eine Schleife über einem Bereich mit dem Schrittwert 2 durchlaufen wird, sodass jedes zweite Element des Bereichs eingeschlossen wird.
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 Schrittwert 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 ebenfalls Ausdrücke sein, z. B. Funktionen, wie im folgenden Code.
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
Im nächsten Beispiel wird die Verwendung eines Platzhalterzeichens (_) veranschaulicht, wenn das Element nicht in der Schleife 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
Hinweis Sie können for...in in Sequenz- und anderen Berechnungsausdrücken verwenden. In diesem Fall wird eine benutzerdefinierte Version des for...in-Ausdrucks verwendet.Weitere Informationen finden Sie unter Sequenzen (F#), Asynchrone Workflows (F#) und Berechnungsausdrücke (F#).
Siehe auch
Referenz
Schleifen: for...to-Ausdruck (F#)
Schleifen: while...do-Ausdruck (F#)