Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Ta konstrukcja pętli służy do iterowania dopasowań wzorca w kolekcji wyliczalnej, takiej jak wyrażenie zakresu, sekwencja, lista, tablica lub inna konstrukcja, która obsługuje wyliczenie.
Składnia
for pattern in enumerable-expression do
body-expression
Uwagi
Wyrażenie for...in można porównać z instrukcją for each w innych językach platformy .NET, ponieważ jest używane do pętli wartości w kolekcji wyliczalnej.
for...in Jednak obsługuje również dopasowywanie wzorców w kolekcji zamiast tylko iteracji w całej kolekcji.
Wyrażenie wyliczalne można określić jako kolekcję wyliczalną lub przy użyciu .. operatora . Kolekcje z możliwością wyliczania obejmują listy, sekwencje, tablice, zestawy, mapy itd. Można użyć dowolnego typu, który implementuje System.Collections.IEnumerable .
W przypadku wyrażania zakresu przy użyciu .. operatora możesz użyć następującej składni.
uruchom plik .. skończyć
Możesz również użyć wersji zawierającej przyrost o nazwie skip, jak w poniższym kodzie.
uruchom plik .. pomiń .. skończyć
Jeśli wartość pominięcia jest nieokreślona, następna wartość wygenerowana w kolekcji jest zwiększana o 1. Po określeniu pominięcia jest on zwiększany o tę wartość.
Wartości dopasowane we wzorcu mogą być również używane w wyrażeniu treści.
Poniższe przykłady kodu ilustrują użycie for...in wyrażenia.
// Looping over a list.
let list1 = [ 1; 5; 100; 450; 788 ]
for i in list1 do
printfn "%d" i
Dane wyjściowe są następujące:
1
5
100
450
788
W poniższym przykładzie pokazano, jak przepętlić sekwencję i jak używać wzorca krotki zamiast prostej zmiennej. W tym przykładzie wyrażenie sekwencji używa -> operatora , który jest skrótem w do yield wyrażeniach sekwencji i innych wyrażeń obliczeniowych. Operator -> umożliwia określenie wyrażenia, którego wartość staje się częścią sekwencji. Aby uzyskać więcej informacji, zobacz Sekwencje i wyrażenia obliczeniowe.
let seq1 = seq { for i in 1 .. 10 -> (i, i*i) }
for (a, asqr) in seq1 do
printfn "%d squared is %d" a asqr
Dane wyjściowe są następujące:
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
W poniższym przykładzie pokazano, jak utworzyć pętlę dla prostego zakresu liczb całkowitych.
let function1() =
for i in 1 .. 10 do
printf "%d " i
printfn ""
function1()
Dane wyjściowe funkcji function1 są następujące.
1 2 3 4 5 6 7 8 9 10
W poniższym przykładzie pokazano, jak przeskoczyć zakres z pominięciem 2, który zawiera każdy inny element zakresu.
let function2() =
for i in 1 .. 2 .. 10 do
printf "%d " i
printfn ""
function2()
Dane wyjściowe polecenia function2 są następujące.
1 3 5 7 9
W poniższym przykładzie pokazano, jak używać zakresu znaków.
let function3() =
for c in 'a' .. 'z' do
printf "%c " c
printfn ""
function3()
Dane wyjściowe polecenia function3 są następujące.
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
W poniższym przykładzie pokazano, jak używać ujemnej wartości pomijania dla iteracji odwrotnej.
let function4() =
for i in 10 .. -1 .. 1 do
printf "%d " i
printfn " ... Lift off!"
function4()
Dane wyjściowe polecenia function4 są następujące.
10 9 8 7 6 5 4 3 2 1 ... Lift off!
Początek i koniec zakresu mogą być również wyrażeniami, takimi jak funkcje, jak w poniższym kodzie.
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
Dane wyjściowe tego elementu wejściowego function5 są następujące.
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
W następnym przykładzie pokazano użycie symbolu wieloznacznego (_), gdy element nie jest potrzebny w pętli.
let mutable count = 0
for _ in list1 do
count <- count + 1
printfn "Number of elements in list1: %d" count
Dane wyjściowe są następujące:
Number of elements in list1: 5
Note Można użyć for...in w wyrażeniach sekwencji i innych wyrażeniach obliczeniowych, w tym przypadku jest używana niestandardowa wersja for...in wyrażenia. Aby uzyskać więcej informacji, zobacz Sekwencje, Wyrażenia asynchroniczne, Wyrażenia zadań i Wyrażenia obliczeniowe.