Pętle: for...in — Wyrażenie

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 .. Zakończ

Możesz również użyć wersji zawierającej przyrost o nazwie skip, jak w poniższym kodzie.

uruchom plik .. pomiń .. Zakończ

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.

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.

Zobacz też