Continuer une boucle spécifique
Fait partie de la section Logique & Flux du Journey GO de Coddy — leçon 3 sur 68.
Tout comme vous pouvez utiliser des étiquettes avec break pour quitter des boucles spécifiques, Go vous permet également d'utiliser des étiquettes avec l'instruction continue. Un continue étiqueté ignore l'itération actuelle de la boucle spécifiée et passe à son itération suivante.
Ceci est particulièrement utile dans les boucles imbriquées lorsque vous souhaitez ignorer le reste de l'itération actuelle d'une boucle externe depuis l'intérieur d'une boucle interne, plutôt que de simplement continuer la boucle interne.
outer:
for i := 0; i < 3; i++ {
for j := 0; j < 3; j++ {
if i == 1 && j == 0 {
continue outer
}
fmt.Printf("i=%d, j=%d\n", i, j)
}
fmt.Println("End of outer loop iteration")
}Dans cet exemple, lorsque i == 1 && j == 0, l'instruction continue outer ignore le reste de l'itération actuelle de la boucle externe, y compris la boucle interne et le message « End of outer loop iteration ». Le programme passe ensuite directement à l'itération suivante de la boucle externe où i devient 2.
Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Défi
FacileDans ce défi, vous allez vous entraîner à utiliser des instructions continue étiquetées pour contrôler l'exécution de boucles imbriquées. Vous construisez un système de traitement de données qui doit ignorer certaines itérations de la boucle externe en fonction de conditions trouvées dans les boucles internes.
Vous recevrez deux entrées :
- Une chaîne représentant le nombre de lignes à traiter (par exemple,
"4") - Une chaîne représentant un nombre de condition d'omission (par exemple,
"3")
Vous disposez du tableau de données 2D suivant :
data := [][]int{
{1, 2, 3, 4, 5},
{6, 7, 8, 9, 10},
{11, 12, 13, 14, 15},
{16, 17, 18, 19, 20},
{21, 22, 23, 24, 25}
}Votre tâche consiste à :
- Analyser le nombre de lignes à partir de la première entrée pour déterminer combien de lignes traiter
- Analyser le nombre de condition d'omission à partir de la deuxième entrée
- Utiliser des boucles imbriquées avec un
continueétiqueté pour traiter les données - Pour chaque ligne, vérifier la valeur de chaque colonne dans cette ligne
- Si vous trouvez le nombre de condition d'omission dans n'importe quelle colonne d'une ligne, utilisez le
continueétiqueté pour ignorer le reste du traitement de cette ligne et passer à la ligne suivante - Pour les lignes qui ne contiennent pas le nombre de condition d'omission, affichez
"Processing row [row_number]: [value1] [value2] [value3] [value4] [value5]" - Pour les lignes qui contiennent le nombre de condition d'omission, affichez
"Skipping row [row_number] due to condition"
Les numéros de ligne doivent être rapportés en utilisant une indexation basée sur 0 (la première ligne est 0). Traitez uniquement le nombre de lignes spécifié dans la première entrée, et vérifiez uniquement les 5 premières colonnes de chaque ligne.
Aide-mémoire
Utilisez des étiquettes avec continue pour ignorer l'itération actuelle d'une boucle spécifique dans des boucles imbriquées :
outer:
for i := 0; i < 3; i++ {
for j := 0; j < 3; j++ {
if i == 1 && j == 0 {
continue outer
}
fmt.Printf("i=%d, j=%d\n", i, j)
}
fmt.Println("End of outer loop iteration")
}Lorsque continue outer est exécuté, il ignore le reste de l'itération actuelle de la boucle externe et passe directement à l'itération suivante de la boucle étiquetée.
Essayez vous-même
package main
import (
"fmt"
"strconv"
)
func main() {
// Lire l'entrée
var rowsInput string
var skipConditionInput string
fmt.Scanln(&rowsInput)
fmt.Scanln(&skipConditionInput)
// Analyser les entrées
numRows, _ := strconv.Atoi(rowsInput)
skipCondition, _ := strconv.Atoi(skipConditionInput)
// Tableau de données 2D fourni
data := [][]int{
{1, 2, 3, 4, 5},
{6, 7, 8, 9, 10},
{11, 12, 13, 14, 15},
{16, 17, 18, 19, 20},
{21, 22, 23, 24, 25},
}
// TODO: Écrivez votre code ci-dessous
// Utilisez des boucles imbriquées avec un continue étiqueté pour traiter les données
// Vérifiez chaque ligne pour le nombre de condition de saut
// Imprimez les messages appropriés selon que la condition est trouvée ou non
}Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Toutes les leçons de Logique & Flux
1Structures de contrôle avancées
Switch avec `fallthrough`Sortir de boucles imbriquéesContinuer une boucle spécifiqueL'instruction `goto`Récapitulatif - Contrôle de boucle avancé4Projet : Liste de tâches simple
Configuration du projetAjouter une tâche2Structures et Méthodes
Définir des méthodes sur des structuresReceveurs par valeurReceveurs par pointeurChoisir les receveursMéthodes vs FonctionsRécapitulatif - Comportement des structures5Les Maps en profondeur
Maps de StructsPointeurs comme valeurs de MapTester les Maps NilComparer des MapsRécapitulatif - Compteur de fréquence de mots3Interfaces (Les bases)
Qu'est-ce qu'une Interface ?Définir une InterfaceImplémenter une InterfaceUtiliser les types d'InterfaceInterface videAssertions de typeType SwitchRécapitulatif - Formes et comportements