Dans cet article, vous découvrirez la boucle for-in, ses cas d'utilisation et ses variantes.
Les boucles for-in sont utilisées pour exécuter un ensemble de tâches un certain nombre de fois. Ces boucles itèrent sur toutes les séquences telles que les éléments d'un tableau, une plage ou des caractères dans une chaîne.
Nous utilisons également une boucle for-in pour effectuer des processus répétitifs pendant une durée déterminée.
Pourquoi avons-nous besoin d'une boucle for-in?
Imaginez que quelqu'un vous dise d'écrire un programme qui génère Hello, World! sur l'écran. Votre solution sera:
print ("Bonjour le monde!")
Et si, ils changeaient d'avis et vous disaient d'écrire un programme qui produirait Hello, World! à l'écran cinq fois… Sans la connaissance de loop, votre solution pourrait être:
print ("Hello, World!") print ("Hello, World!") print ("Hello, World!") print ("Hello, World!") print ("Hello, World!")
Hmm. Cela semble prendre du temps pour écrire un code similaire cinq fois pour accomplir le même travail. Si tel est le cas, que feriez-vous si quelqu'un vous demandait d'écrire un programme qui génère Hello, World! sur l'écran des centaines, voire des millions de fois?
Une solution naïve consiste à écrire la print
déclaration pour un nombre donné de fois. Cela semble fou, non? Mais il existe une meilleure solution pour cela avec l'utilisation de for-in
boucles avec quelques lignes de code comme:
for i in 1… 100 ( //outputs Hello world for 100 times in the screen print("Hello, World!") )
Ne vous inquiétez pas de la syntaxe, nous allons l'explorer ci-dessous.
Syntaxe de la boucle For-in
Vous pouvez créer une boucle for in dans Swift comme:
pour in ()
La boucle ci-dessus itère sur une plage et nous pouvons accéder à chaque élément renvoyé par la plage en variable. Si vous ne connaissez pas la portée, vous pouvez consulter l'article: Swift Ranges.
Comment ça fonctionne?
- La séquence en cours d'itération est un.
- Le est défini sur le premier nombre de la plage et les instructions à l'intérieur de la boucle sont exécutées.
- Une fois l'instruction exécutée, le est mis à jour pour contenir la deuxième valeur de et l'instruction est à nouveau exécutée.
- Ce processus se poursuit jusqu'à ce que la fin de la plage soit atteinte et que la boucle s'arrête.
Exemple 1: Fonctionnement de la boucle for-in dans Swift
for i in 1… 3 ( print("Hello world!. Value is (i)") )
Lorsque vous exécutez le programme, la sortie sera:
Bonjour le monde!. La valeur est 1 Bonjour tout le monde !. La valeur est de 2 Bonjour tout le monde !. La valeur est 3
Dans le programme ci-dessus, la séquence répétée est une plage de 1 à 3.
La valeur de i est définie sur le premier nombre de la plage (1) et mise à jour avec le numéro suivant de la plage à chaque itération. Ce processus se poursuit jusqu'à ce que la fin de la plage (3) soit atteinte.
Étapes d'exécution de la boucle For-inItération | Valeur renvoyée par la plage (i) | Production |
---|---|---|
1 | 1 | Bonjour le monde!. La valeur est 1 |
2 | 2 | Bonjour le monde!. La valeur est 2 |
3 | 3 | Bonjour le monde!. La valeur est 3 |
Ignorer la valeur de plage dans une boucle for-in
Si vous n'avez aucune utilité pour la valeur de plage à l'intérieur de la boucle, vous pouvez ignorer en utilisant _
(trait de soulignement) dans Swift comme:
pour _ dans ()
Exemple 2: rejet de la valeur de plage dans la boucle for-in
// This example neglects value and uses half open range operator for _ in 1… <3 ( print("Hello world!") )
Lorsque vous exécutez le programme, la sortie sera:
Bonjour le monde! Bonjour le monde!
Dans le programme ci-dessus, la séquence en cours d'itération est une plage de 1 à 2 en raison de l'utilisation de l'opérateur de plage semi-ouverte (… <) qui inclut la borne inférieure (1) mais pas la borne supérieure (3).
_
néglige la valeur de la plage (1) et l'instruction d'impression est exécutée. L'instruction d'impression est appelée à nouveau pour l'itération suivante et le processus se termine car 2 est la dernière valeur de la plage.
Itération | Valeur renvoyée par la plage | Production |
---|---|---|
1 | Mis au rebut | Bonjour le monde! |
2 | Mis au rebut | Bonjour le monde! |
boucle for-in pour intervalles fixes utilisant la foulée
Si vous voulez une boucle qui s'incrémente d'une valeur fixe à chaque itération, au lieu de la plage, vous devez utiliser la méthode stride.
Exemple 3: boucle for-in utilisant la méthode stride
let interval = 2 for i in stride(from: 1, to: 10, by: interval) ( print(i) )
Lorsque vous exécutez le programme, la sortie sera:
1 3 5 7 9
Dans le programme ci-dessus, la stride
fonction renvoie la séquence de nombres: 1, 3, 5, 7, 9.
La valeur de i est définie sur le premier nombre de la séquence (1), et l'instruction d'impression à l'intérieur de la boucle est exécutée, ce qui génère "1" dans la console.
Une fois l'instruction exécutée, la valeur de i est mise à jour vers une autre valeur (3) et l'instruction d'impression est à nouveau appelée. Ce processus se poursuit jusqu'à ce que tous les éléments de la séquence soient accessibles.
Étapes d'exécution de la boucle for-in à l'aide de strideValeur | Condition (valeur <fin) | i (sortie) |
---|---|---|
1 | 1 <10 (vrai) | 1 |
1 + 2 = 3 | 3 <10 (vrai) | 3 |
1 + 2 * 2 = 5 | 5 <10 (vrai) | 5 |
1 + 3 * 2 = 7 | 7 <10 (vrai) | sept |
1 + 4 * 2 = 9 | 9 <10 (vrai) | 9 |
1 + 5 * 2 = 11 | 11 <10 (faux) | Arrêts |
Comment accéder aux éléments d'une collection en utilisant la boucle for-in?
Supposons que vous ayez un tableau de chaînes comme ci-dessous. Si vous ne connaissez pas le tableau, considérez le tableau comme un conteneur unique qui peut stocker plusieurs valeurs. Pour une explication plus détaillée, consultez Swift Arrays.
let programmationLanguages = ("Swift", "Java", "Go", "JavaScript", "Kotlin", "Python")
What if someone told you to print all the programming languages?
A way is to access those elements using index as programmingLanguages(0), programmingLanguages(1)
… and so on till you get all the elements. But this is too tedious.
Here comes for-in loop to the rescue. You can iterate using for in loop as:
Example 4: Accessing elements of an array (collection) using for-in loop
let programmingLanguages = ("Swift", "Java", "Go", "JavaScript", "Kotlin", "Python") for language in programmingLanguages ( print(language) )
When you run the program, the output will be:
Swift Java Go JavaScript Kotlin Python
In the above program, the sequence being iterated over is an array of strings.
The value of language is set to the first element of the array, and the print statement inside the loop is executed which outputs "Swift" in the console.
After the statement is executed, language is updated with the next element of the array and the print statement is called again. This process continues until the last element of array is accessed.
Example 5: Accessing elements of a string (collection) using for-in loop
Since, in Swift, strings are also collection, you can access each character in a string using for loop.
for value in "I♥Swift!" ( print(value) )
When you run the program, the output will be:
I ♥ S w i f t !
How to access indices of a collection using for-in loop?
If you want to access the index of the array (position of elements in an array i.e. 0, 1, 2), you need to use enumerated
method as:
Example 6: Accessing indices of an array using for-in loop
let programmingLanguages = ("Swift", "Java", "Go", "JavaScript", "Kotlin", "Python") for (index, language) in programmingLanguages.enumerated() ( print("(index):(language)") )
When you run the program, the output will be:
0:Swift 1:Java 2:Go 3:JavaScript 4:Kotlin 5:Python
Here, the enumerated method returns a tuple (Int
, String
) composed of the index (Int
) and the value (String
) for each item in the array. For example: (0, Swift), (1, Java)…
Using for-in
loop, you can access these items in a tuple one by one. If you don't know about Tuple, you can simply think it as a container that can hold value of different types. For more detailed explanation, see Swift Tuples .
How to filter elements using where clause in a for-in loop?
You can also filter contents from for in loop using where clause as
for value in "I♥Swift!" where value != "!" ( print(value) //removes exclamation sign )
When you run the program, the output will be:
I ♥ S w i f t
In the above program, the sequence being iterated over is string (collection of characters).
value est définie sur le premier caractère de la chaîne et est vérifiée avec la condition where. Si la condition retourne true
, le bloc à l'intérieur de la boucle (instruction d'impression) est exécuté et génère "I" dans la console.
Une fois l'instruction exécutée, la valeur est mise à jour au caractère suivant de la chaîne et à nouveau la condition est vérifiée. Si la condition retourne false
, elle n'exécute pas le bloc et la valeur est mise à jour au caractère suivant.
Ce processus se poursuit jusqu'à ce que le dernier caractère de la chaîne soit accédé.
Filtrer à l'aide des étapes d'exécution de la boucle for-inItération | valeur | valeur! = "!" | Production |
---|---|---|---|
1 | je | vrai | je |
2 | ♥ | vrai | ♥ |
3 | S | vrai | S |
4 | w | vrai | w |
5 | je | vrai | je |
6 | F | vrai | F |
sept | t | vrai | t |
8 | ! | faux |