Udostępnij za pośrednictwem


Pętle: for...in — Wyrażenie (F#)

Tej konstrukcji pętli umożliwia iteracyjne przeglądanie dopasowania wzorca agregującym kolekcji, takie jak wyrażenie zakresu, sekwencja, listy, tablicy lub innych konstrukcji, który obsługuje wyliczanie.

for pattern in enumerable-expression do
   body-expression

Uwagi

for…in Wyrażenie można porównać do for each instrukcji w innych.NET języków, ponieważ jest używany do przeglądania w pętli wartości w zbiorze agregującym.Jednakże for…in obsługuje również wzorzec dopasowania nad kolekcji zamiast po prostu iteracji za pośrednictwem całej kolekcji.

W wyrażeniu agregującym można określić jako agregującym kolekcji lub przy użyciu .. operator, jako zakres na typ integralny.Kolekcje agregującym obejmują wykazy, sekwencji, tablice, zestawy, mapy itd.Dowolnego typu, który implementuje IEnumerable mogą być używane.

Gdy zakres wyrazić przy użyciu .. operatora, można użyć następującej składni.

start ..finish

Można również użyć wersji, która zawiera przyrost, o nazwie pominąć, jak w poniższym kodzie.

start ..skip ..finish

Użycie zakresów integralną i zmiennej prostego licznika jako deseń typowe zachowanie jest przyrost wartości zmiennej counter przy każdej iteracji, ale jeśli zakres zawiera wartości Pomiń, licznik jest zwiększany o wartość Pomiń zamiast.

Można również dopasowywane w strukturze wartości w wyrażeniu ciała.

W poniższych przykładach kodu ilustrują użycie for...in wyrażenie.

// Looping over a list. 
let list1 = [ 1; 5; 100; 450; 788 ]
for i in list1 do
   printfn "%d" i

Wprowadza dane wyjściowe.

1
5
100
450
788

Poniższy przykład pokazuje jak pętlę w sekwencji i jak używać deseń krotka zamiast prostych 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

Wprowadza dane wyjściowe.

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

Poniższy przykład pokazuje, jak pętli w przedziale liczbą całkowitą.

let function1() =
  for i in 1 .. 10 do
    printf "%d " i
  printfn ""
function1()

Dane wyjściowe function1 wygląda następująco:

1 2 3 4 5 6 7 8 9 10

Poniższy przykład pokazuje, jak w pętli w przedziale z Pomiń 2, która obejmuje każdy element zakresu.

let function2() =
  for i in 1 .. 2 .. 10 do
     printf "%d " i
  printfn ""
function2()

Dane wyjściowe z function2 jest w następujący sposób.

1 3 5 7 9

Poniższy przykład pokazuje, jak używać zakresu znaków.

let function3() =
  for c in 'a' .. 'z' do
    printf "%c " c
  printfn ""
function3()

Dane wyjściowe z function3 jest w następujący sposób.

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

Poniższy przykład pokazuje, jak używać wartości ujemne Pomiń dla odwrotnej iteracji.

let function4() =
    for i in 10 .. -1 .. 1 do
        printf "%d " i
    printfn " ... Lift off!"
function4()

Dane wyjściowe z function4 jest w następujący sposób.

10 9 8 7 6 5 4 3 2 1 ... Lift off!

Początek i koniec zakresu może być również wyrażeń, takich 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 z function5 z tym dane wejściowe jest w następujący sposób.

2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18

Następny przykład pokazuje użycie symbolu wieloznacznego (_), gdy element nie jest potrzebna w pętli.

let mutable count = 0
for _ in list1 do
   count <- count + 1
printfn "Number of elements in list1: %d" count

Wprowadza dane wyjściowe.

Number of elements in list1: 5

Uwaga można użyć for...in w sekwencji wyrażeń i inne wyrażenia obliczeń, w którym to przypadku dostosowaną wersję for...in jest używane wyrażenie.Aby uzyskać więcej informacji, zobacz Sekwencje (F#), Asynchroniczne przepływy pracy (F#), i Wyrażenia obliczeń (F#).

Zobacz też

Informacje

Pętle: for...to — Wyrażenie (F#)

Pętle: while...do — Wyrażenie (F#)

Inne zasoby

Materiały referencyjne dotyczące języka F#