Dela via


Loopar: för... i uttryck

Den här loopkonstruktionen används för att iterera över matchningar av ett mönster i en uppräkningsbar samling, till exempel ett intervalluttryck, sekvens, lista, matris eller annan konstruktion som stöder uppräkning.

Syntax

for pattern in enumerable-expression do
    body-expression

Kommentarer

Uttrycket for...in kan jämföras med -instruktionen for each på andra .NET-språk eftersom det används för att loopa över värdena i en uppräkningsbar samling. for...in Men har också stöd för mönstermatchning över samlingen i stället för bara iteration över hela samlingen.

Det uppräkningsbara uttrycket kan anges som en uppräkningsbar samling eller med hjälp av operatorn .. . Uppräkningsbara samlingar omfattar listor, sekvenser, matriser, uppsättningar, kartor och så vidare. Alla typer som implementerar System.Collections.IEnumerable kan användas.

När du uttrycker ett intervall med hjälp av operatorn .. kan du använda följande syntax.

starta .. Avsluta

Du kan också använda en version som innehåller en ökning som kallas hoppa över, som i följande kod.

starta .. hoppa över .. Avsluta

Om hoppa över-värdet är ospecificerat ökas nästa värde som genereras i samlingen med 1. När hoppa över har angetts ökas det med det värdet.

Värden som matchas i mönstret kan också användas i brödtextuttrycket.

Följande kodexempel illustrerar användningen av for...in uttrycket.

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

Utdata är följande.

1
5
100
450
788

I följande exempel visas hur du loopar över en sekvens och hur du använder ett tupppelmönster i stället för en enkel variabel.

let seq1 = seq { for i in 1 .. 10 -> (i, i*i) }
for (a, asqr) in seq1 do
  printfn "%d squared is %d" a asqr

Utdata är följande.

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

I följande exempel visas hur du loopar över ett enkelt heltalsintervall.

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

Utdata från function1 är följande.

1 2 3 4 5 6 7 8 9 10

I följande exempel visas hur du loopar över ett intervall med ett hopp på 2, vilket inkluderar alla andra element i intervallet.

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

Utdata för function2 är följande.

1 3 5 7 9

I följande exempel visas hur du använder ett teckenintervall.

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

Utdata för function3 är följande.

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

I följande exempel visas hur du använder ett negativt hoppvärde för en omvänd iteration.

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

Utdata för function4 är följande.

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

Början och slutet av intervallet kan också vara uttryck, till exempel funktioner, som i följande kod.

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

Utdata för function5 med den här indatan är följande.

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

I nästa exempel visas användningen av ett jokertecken (_) när elementet inte behövs i loopen.

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

Utdata är följande.

Number of elements in list1: 5

Note Du kan använda for...in i sekvensuttryck och andra beräkningsuttryck, i vilket fall en anpassad version av for...in uttrycket används. Mer information finns i Sekvenser, Async-uttryck, Uppgiftsuttryck och Beräkningsuttryck.

Se även