Partager via


Boucles : for... in Expression

Cette construction de bouclage est utilisée pour itérer sur les correspondances d’un modèle dans une collection énumérable, telle qu’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

Remarques

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 mise en correspondance des modèles sur la collection au lieu d’une itération uniquement 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, et ainsi de suite. 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 .. Finir

Vous pouvez également utiliser une version qui inclut un incrément appelé skip, comme dans le code suivant.

start .. ignorez .. Finir

Si la valeur d’ignorer n’est pas spécifiée, la valeur suivante générée dans la collection est incrémentée de 1. Lorsque l’ignorer est spécifié, il est incrémenté par cette valeur.

Les valeurs mises en correspondance dans le modèle peuvent également être utilisées dans l’expression du 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 tuple au lieu d’une variable simple. Dans cet exemple, l’expression de séquence utilise l’opérateur -> , qui est un raccourci pour les do yield expressions de séquence et d’autres expressions de calcul. L’opérateur -> vous permet de spécifier une expression dont la valeur fait partie de la séquence. Pour plus d’informations, consultez Séquences et expressions de calcul.

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 entière 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, 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 est function2 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 est function3 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 d’skip 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 est function4 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, telles que 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 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 les 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.

Voir aussi