Boucles : expression for...in (F#)
Cette construction de bouclage est utilisée pour itérer au sein des correspondances d'un modèle dans une collection énumérable, telle qu'une expression de plage, une séquence, une liste, un tableau ou toute autre construction prenant en charge l'énumération.
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, en ce sens qu'elle est utilisée pour effectuer une boucle sur les valeurs dans une collection énumérable.Toutefois, for…in prend également en charge les critères spéciaux sur la collection au lieu d'une seule itération sur la collection entière.
L'expression énumérable peut être spécifiée comme collection énumérable ou, en utilisant l'opérateur .., comme plage sur un type intégral.Les listes, séquences, tableaux, jeux, mappages, etc. constituent des collections énumérables.Tout type qui implémente 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é saut, comme dans le code suivant.
start ..skip ..finish
Lorsque vous utilisez des plages intégrales et une variable de compteur simple comme modèle, le comportement habituel consiste à incrémenter la variable de compteur de 1 sur chaque itération. Toutefois, si la plage inclut une valeur de saut, le compteur est incrémenté de la valeur de saut.
Les valeurs correspondantes 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 saut de 2, ce qui inclut un élément sur deux 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 effectuer 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, notamment 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 illustre l'utilisation d'un caractère générique (_) lorsque l'élément n'est pas exigé 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
Remarque Vous pouvez utiliser for...in dans des expressions de séquence et 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 (F#), Workflows asynchrones (F#) et Expressions de calcul (F#).
Voir aussi
Référence
Boucles : expression for...to (F#)
Boucles : expression while...do (F#)