Cicli: espressioni for...in (F#)
Questo costrutto di ciclo viene utilizzato per scorrere le corrispondenze di un modello in una raccolta enumerabile, ad esempio un'espressione di intervallo, una sequenza, un elenco, una matrice o un altro costrutto che supporta l'enumerazione.
for pattern in enumerable-expression do
body-expression
Note
L'espressione for…in può essere confrontata all'istruzione for each in altri linguaggi .NET perché viene utilizzata per eseguire il ciclo nei valori in una raccolta enumerabile. for…in supporta tuttavia anche la corrispondenza dei modelli nella raccolta e non solo l'iterazione nell'intera raccolta.
È possibile specificare l'espressione enumerabile come raccolta enumerabile oppure, utilizzando l'operatore .., come un intervallo in un tipo integrale. Le raccolte enumerabili includono elenchi, sequenze, matrici, set, mappe e così via. È possibile utilizzare qualsiasi tipo che implementa IEnumerable.
Quando si esprime un intervallo utilizzando l'operatore .., è possibile utilizzare la sintassi seguente.
start .. finish
È anche possibile utilizzare una versione che include un incremento, detto salto, come illustrato nel codice seguente.
start .. skip .. finish
Quando si utilizzano intervalli integrali e una variabile contatore semplice come modello, il comportamento tipico consiste nell'incrementare la variabile contatore di 1 per ogni iterazione, ma se l'intervallo include un valore di salto, il contatore viene invece incrementato del valore di salto.
Nell'espressione del corpo possono essere utilizzati anche i valori per i quali viene trovata una corrispondenza nel modello.
Negli esempi di codice seguenti viene illustrato l'utilizzo 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 in una sequenza e come utilizzare un modello 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 in un intervallo di numeri interi semplice.
let function1() =
for i in 1 .. 10 do
printf "%d " i
printfn ""
function1()
L'output di function1 è indicato di seguito.
1 2 3 4 5 6 7 8 9 10
Nell'esempio seguente viene illustrato come eseguire un ciclo in un intervallo con un salto di 2, che include un elemento sì e uno no dell'intervallo.
let function2() =
for i in 1 .. 2 .. 10 do
printf "%d " i
printfn ""
function2()
L'output di function2 è indicato di seguito.
1 3 5 7 9
Nell'esempio seguente viene illustrato come utilizzare un intervallo di caratteri.
let function3() =
for c in 'a' .. 'z' do
printf "%c " c
printfn ""
function3()
L'output di function3 è indicato di seguito.
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 utilizzare un valore di salto 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 è indicato di seguito.
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 è indicato di seguito.
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
Nell'esempio successivo è illustrato l'utilizzo 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
Nota È possibile utilizzare for...in in espressioni sequenza e altre espressioni di calcolo, nel qual caso viene utilizzata una versione personalizzata dell'espressione for...in. Per ulteriori informazioni, vedere Sequenze (F#), Flussi di lavoro asincroni (F#) e Espressioni di calcolo (F#).
Vedere anche
Riferimenti
Cicli: espressione for...to (F#)
Cicli: espressioni while...do (F#)