Condividi tramite


Espressione Loops: for...in

Questo costrutto di ciclo viene usato per scorrere le corrispondenze di un criterio in una raccolta enumerabile, ad esempio un'espressione di intervallo, una sequenza, un elenco, una matrice o un altro costrutto che supporta l'enumerazione.

Sintassi

for pattern in enumerable-expression do
    body-expression

Osservazioni:

L'espressione for...in può essere confrontata con l'istruzione for each in altri linguaggi .NET perché viene usata per eseguire un ciclo sui valori in una raccolta enumerabile. Tuttavia, for...in supporta anche la corrispondenza dei criteri rispetto alla raccolta anziché solo l'iterazione sull'intera raccolta.

L'espressione enumerabile può essere specificata come raccolta enumerabile o tramite l'operatore .. . Le raccolte enumerabili includono elenchi, sequenze, matrici, set, mappe e così via. È possibile usare qualsiasi tipo che implementa System.Collections.IEnumerable .

Quando si esprime un intervallo usando l'operatore .. , è possibile usare la sintassi seguente.

avviare .. Finire

È anche possibile usare una versione che include un incremento denominato skip, come nel codice seguente.

avviare .. ignorare .. Finire

Se il valore skip non è specificato, il valore successivo generato nella raccolta viene incrementato di 1. Quando si specifica skip, viene incrementato di tale valore.

I valori corrispondenti nel criterio possono essere usati anche nell'espressione del corpo.

Gli esempi di codice seguenti illustrano l'uso dell'espressione for...in .

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

L'output è indicato di seguito.

1
5
100
450
788

Nell'esempio seguente viene illustrato come eseguire un ciclo su una sequenza e come usare un modello di tupla anziché una variabile semplice.

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

L'output è indicato di seguito.

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

Nell'esempio seguente viene illustrato come eseguire un ciclo su un intervallo intero semplice.

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

L'output di function1 è il seguente.

1 2 3 4 5 6 7 8 9 10

Nell'esempio seguente viene illustrato come eseguire un ciclo su un intervallo con un salto di 2, che include ogni altro elemento dell'intervallo.

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

L'output di function2 è il seguente.

1 3 5 7 9

Nell'esempio seguente viene illustrato come usare un intervallo di caratteri.

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

L'output di function3 è il seguente.

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

Nell'esempio seguente viene illustrato come usare un valore skip negativo per un'iterazione inversa.

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

L'output di function4 è il seguente.

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

L'inizio e la fine dell'intervallo possono anche essere espressioni, ad esempio funzioni, come nel codice seguente.

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

L'output di function5 con questo input è il seguente.

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

Nell'esempio seguente viene illustrato l'uso di un carattere jolly (_) quando l'elemento non è necessario nel ciclo.

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

L'output è indicato di seguito.

Number of elements in list1: 5

Note È possibile usare for...in nelle espressioni di sequenza e in altre espressioni di calcolo, nel qual caso viene usata una versione personalizzata dell'espressione for...in . Per altre informazioni, vedere Sequenze, espressioni asincrone, espressioni task ed espressioni di calcolo.

Vedi anche