English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Dans cet article, vous découvrirez le for-in boucles, leurs exemples d'utilisation et variantes.
for-in pour exécuter un ensemble de tâches en un laps de temps fixe. Ces boucles itèrent sur n'importe quelle séquence, comme les éléments d'un tableau, une plage ou les caractères d'une chaîne.
Nous utilisons également for-La boucle in exécute des processus répétés en un laps de temps fixe.
Imaginez, quelqu'un vous dit d'écrire un programme pour afficher Hello, World ! sur l'écran. Votre solution serait :
print("Bonjour, le monde!")
Si ils changent d'avis et vous disent d'écrire un programme pour afficher Hello, World ! cinq fois sur l'écran, que faire ? Si vous ne connaissez pas les boucles, votre solution pourrait être :
print("Bonjour, le monde!") print("Bonjour, le monde!") print("Bonjour, le monde!") print("Bonjour, le monde!") print("Bonjour, le monde!")
Eh bien, il semble que cela soit chronophage de terminer cinq fois le même code pour accomplir la même tâche. Si c'est le cas, que ferez-vous si quelqu'un vous demande d'écrire un programme pour afficher Hello, World ! sur l'écran plusieurs centaines ou même plusieurs millions de fois ?
Une solution infantile serait d'écrire une statement print pour chaque nombre donné. Ça semble folle, mais en utilisant for-Certaines lignes de code de la boucle in peuvent trouver une meilleure solution :
for i in 1...100 { //Afficher Hello World à l'écran 100 fois print("Bonjour, le monde!") }
Ne vous inquiétez pas de la syntaxe, nous en parlerons ci-dessous.
Vous pouvez créer une boucle for in en Swift comme suit :
for <value> in <range> { <some work here> }
La boucle ci-dessus itère une plage, et nous pouvons accéder à chaque élément retourné par cette plage dans la variable <value>. Si vous ne connaissez pas les plages, vous pouvez consulter l'article suivant :Plages Swift.
La séquence itérée est une <range>.
Définir <value> comme le premier nombre de la plage et exécuter la statement < Certaines tâches ici >
Après l'exécution de la statement, <value> est mis à jour pour inclure la deuxième valeur de <range>, et la statement <Certaines tâches ici> est exécuté à nouveau.
Ce processus continue jusqu'à ce que la fin de la plage soit atteinte et que la boucle s'arrête.
for i in 1...3 { print("Bonjour le monde ! La valeur est \(i)") }
运行该程序时,输出为:
Bonjour le monde ! La valeur est 1 Bonjour le monde ! La valeur est 2 Bonjour le monde ! La valeur est 3
Dans le programme ci-dessus, la plage de séquence à itérer est1à3.
la valeur de i est définie sur la plage (1). Le premier nombre de la boucle, et il est mis à jour pour le prochain nombre de la plage à chaque itération. Ce processus continue jusqu'à ce que la plage (3. La fin de la boucle )
迭代 | la valeur retournée par la plage (i) | 输出 |
---|---|---|
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 |
Si vous n'utilisez pas de valeur de plage dans la boucle, vous pouvez utiliser (tiret bas _) pour ignorer en Swift, comme suit :
for _ in <range> { <some work here> }
//Dans cet exemple, les valeurs sont ignorées et l'opérateur de plage semi-ouverte est utilisé for _ in 1..<3 { print("Hello world!") }
运行该程序时,输出为:
Hello world! Hello world!
Dans le programme ci-dessus, en raison de l'utilisationopérateur de plage semi-ouverte(.. <),donc la plage de la séquence à parcourir est1à2y compris la limite inférieure (1) mais ne comprend pas la limite supérieure (3)。
le tiret bas _ ignore la plage (1) des valeurs, et exécutez l'instruction print. Appeler à nouveau l'instruction print pour l'itération suivante, et le processus se termine car2est la dernière valeur de la plage.
迭代 | les valeurs retournées par l'intervalle | 输出 |
---|---|---|
1 | Ignorer | Hello world! |
2 | Ignorer | Hello world! |
Si vous souhaitez que la boucle augmente d'une valeur fixe à chaque itération (plutôt qu'un intervalle), vous devez utiliser la méthode stride.
let interval = 2 for i in stride(from: 1, to: 10, by: interval) { print(i) }
运行该程序时,输出为:
1 3 5 7 9
Dans le programme ci-dessus, la fonction stride retourne la séquence de nombres :1、3、5、7、9.
la valeur de i est définie sur la séquence (1) du premier nombre, et l'instruction print à l'intérieur de la boucle est exécutée, qui affiche " 1"
Après l'exécution de cette instruction, la valeur de i est mise à jour avec une autre valeur (3) et appeler à nouveau la directive print. Ce processus se poursuit jusqu'à ce que tous les éléments de la séquence soient visités.
valeur | condition (Value < Fin) | i (sortie) |
---|---|---|
1 | 1 < 10 (true) | 1 |
1 + 2 = 3 | 3 < 10 (true) | 3 |
1 + 2 * 2 = 5 | 5 < 10 (true) | 5 |
1 + 3 * 2 = 7 | 7 < 10 (true) | 7 |
1 + 4 * 2 = 9 | 9 < 10 (true) | 9 |
1 + 5 * 2 = 11 | 11 < 10 (false) | Stops |
Supposons que vous ayez un tableau de chaînes de caractères, comme suit. Si vous ne connaissez pas les tableaux, vous pouvez les considérer comme un conteneur unique capable de stocker plusieurs valeurs. Pour plus de détails, voirTableau Swift.
let programmingLanguages = ["Swift", "Java", "Go", "JavaScript", "Kotlin", "Python"]
Que faire si quelqu'un vous dit d'imprimer toutes les langues de programmation ?
Une méthode consiste à utiliser l'indice de valeur programmingLanguages[0], programmingLanguages[1]... pour accéder à ces éléments, et ainsi de suite, jusqu'à ce que tous les éléments soient obtenus. Mais c'est trop fastidieux.
Donc, la boucle est utile. Vous pouvez itérer avec une boucle for in :
let programmingLanguages = ["Swift", "Java", "Go", "JavaScript", "Kotlin", "Python"] for language in programmingLanguages { print(language) }
运行该程序时,输出为:
Swift Java Go JavaScript Kotlin Python
Dans le programme ci-dessus, la séquence à itérer est un tableau de chaînes de caractères.
La valeur de language est définie sur le premier élément du tableau, et l'instruction print à l'intérieur de la boucle est exécutée, affichant "Swift" dans le console.
Après l'exécution de l'instruction, la valeur de language sera mise à jour par l'élément suivant du tableau, et l'instruction print sera appelée à nouveau. Ce processus continue jusqu'à ce que l'élément final du tableau soit atteint.
En raison de ce que dans SwiftChaîneest également un ensemble, donc vous pouvez utiliser une boucle for pour accéder à chaque caractère de la chaîne.
for value in "I♥Swift!" { print(value) }
运行该程序时,输出为:
I ♥ S w i f t !
Si vous souhaitez accéder aux indices (la position des éléments dans le tableau, c'est-à-dire 0,1、2),则需要使用 enumerated 方法:
let programmingLanguages = ["Swift", "Java", "Go", "JavaScript", "Kotlin", "Python"] for (index, language) in programmingLanguages.enumerated() { print("\(index):\(language)") }
运行该程序时,输出为:
0:Swift 1:Java 2:Go 3:JavaScript 4:Kotlin 5:Python
Ici, la méthode enumère chaque élément de l'array sous forme de paires composées de l'index (Int) et de la valeur (String) (Int, String). Par exemple : (0,Swift), (1,Java)
Utilisez for-dans une boucle for in, vous pouvez accéder individuellement à ces éléments de la paire. Si vous ne connaissez pas Tuple (paire), vous pouvez le considérer simplement comme un conteneur qui peut contenir différentes valeurs.
Vous pouvez également utiliserwhereLa clause filtre le contenu de la boucle for
for value in "I♥Swift!" where value != "!" { print(value) //删除感叹号 }
运行该程序时,输出为:
I ♥ S w i f t
在上面的程序中,要迭代的序列是字符串(字符集合)。
value 设置为字符串的第一个字符,并使用where条件进行检查。如果条件返回true,则执行循环内的块(打印语句),该块在控制台输出“ I”。
语句执行后,value 将更新为字符串的下一个字符,然后再次检查条件。如果条件返回 false,则不执行该块,value 并更新为下一个字符。
该过程一直持续到访问字符串的最后一个字符为止。
迭代 | value | value != “!” | 输出 |
---|---|---|---|
1 | I | true | I |
2 | ♥ | true | ♥ |
3 | S | true | S |
4 | w | true | w |
5 | i | true | i |
6 | f | true | f |
7 | t | true | t |
8 | ! | false |