Esporta (0) Stampa
Espandi tutto
Espandi Riduci a icona
Il presente articolo è stato tradotto manualmente. Passare il puntatore sulle frasi nell'articolo per visualizzare il testo originale.
Traduzione
Originale

Cicli: espressioni for...in (F#)

Questo costrutto di ciclo viene utilizzato per scorrere le corrispondenze di un modello in un insieme 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

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 un insieme enumerabile. for…in supporta tuttavia anche la corrispondenza dei modelli nell'insieme e non solo l'iterazione nell'intero insieme.

È possibile specificare l'espressione enumerabile come insieme enumerabile oppure, utilizzando l'operatore .., come un intervallo in un tipo integrale. Gli insiemi 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#).

Aggiunte alla community

AGGIUNGI
Mostra:
© 2014 Microsoft