Boucles : expression for...in
Cette boucle est utilisée pour itérer au sein des correspondances d’un modèle dans une collection énumérable, comme une expression de plage, une séquence, une liste, un tableau ou une autre construction qui prend en charge l’énumération.
Syntaxe
for pattern in enumerable-expression do
body-expression
Notes
L’expression for...in
peut être comparée à l’instruction for each
dans d’autres langages .NET, car elle est utilisée pour effectuer une boucle sur les valeurs d’une collection énumérable. Toutefois, for...in
prend également en charge la correspondance de modèles sur la collection au lieu d’une simple itération sur l’ensemble de la collection.
L’expression énumérable peut être spécifiée en tant que collection énumérable ou à l’aide de l’opérateur ..
. Les collections énumérables incluent des listes, des séquences, des tableaux, des ensembles, des cartes, etc. Tout type qui implémente System.Collections.IEnumerable
peut être utilisé.
Lorsque vous exprimez une plage à l’aide de l’opérateur ..
, vous pouvez utiliser la syntaxe suivante.
start .. finish
Vous pouvez également utiliser une version qui inclut un incrément appelé skip, comme dans le code suivant.
start .. skip .. finish
Si la valeur skip n’est pas spécifiée, la valeur suivante générée dans la collection est incrémentée de 1. Quand skip est spécifié, elle est incrémentée de cette valeur.
Les valeurs mises en correspondance dans le modèle peuvent également être utilisées dans l’expression de corps.
Les exemples de code suivants illustrent l’utilisation de l’expression for...in
.
// Looping over a list.
let list1 = [ 1; 5; 100; 450; 788 ]
for i in list1 do
printfn "%d" i
La sortie est la suivante.
1
5
100
450
788
L’exemple suivant montre comment effectuer une boucle sur une séquence et comment utiliser un modèle de tuple au lieu d’une variable simple.
let seq1 = seq { for i in 1 .. 10 -> (i, i*i) }
for (a, asqr) in seq1 do
printfn "%d squared is %d" a asqr
La sortie est la suivante.
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
L’exemple suivant montre comment effectuer une boucle sur une plage d’entiers simple.
let function1() =
for i in 1 .. 10 do
printf "%d " i
printfn ""
function1()
La sortie de function1 est la suivante.
1 2 3 4 5 6 7 8 9 10
L’exemple suivant montre comment effectuer une boucle sur une plage avec un skip de 2, qui inclut tous les autres éléments de la plage.
let function2() =
for i in 1 .. 2 .. 10 do
printf "%d " i
printfn ""
function2()
La sortie de function2
est la suivante.
1 3 5 7 9
L’exemple suivant montre comment utiliser une plage de caractères.
let function3() =
for c in 'a' .. 'z' do
printf "%c " c
printfn ""
function3()
La sortie de function3
est la suivante.
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
L’exemple suivant montre comment utiliser une valeur de saut négative pour une itération inverse.
let function4() =
for i in 10 .. -1 .. 1 do
printf "%d " i
printfn " ... Lift off!"
function4()
La sortie de function4
est la suivante.
10 9 8 7 6 5 4 3 2 1 ... Lift off!
Le début et la fin de la plage peuvent également être des expressions, par exemple des fonctions, comme dans le code suivant.
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
La sortie de function5
avec cette entrée est la suivante.
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
L’exemple suivant montre l’utilisation d’un caractère générique (_) lorsque l’élément n’est pas nécessaire dans la boucle.
let mutable count = 0
for _ in list1 do
count <- count + 1
printfn "Number of elements in list1: %d" count
La sortie est la suivante.
Number of elements in list1: 5
Note
Vous pouvez utiliser for...in
dans des expressions de séquence et d’autres expressions de calcul, auquel cas une version personnalisée de l’expression for...in
est utilisée. Pour plus d’informations, consultez Séquences, Expressions asynchrones, Expressions de tâche et Expressions de calcul.