Выход из вложенных циклов
Часть раздела Логика и управление потоком путешествия по GO на Coddy. Урок 2 из 68.
При работе с вложенными циклами обычный оператор break завершает только самый внутренний цикл. Однако Go предоставляет метки, которые позволяют напрямую прерывать внешние циклы, давая точный контроль над сложными структурами циклов.
Метка — это идентификатор, за которым следует двоеточие, который размещают перед циклом. Затем можно использовать break, за которым следует имя метки, чтобы выйти из этого конкретного цикла, даже находясь внутри вложенных циклов.
outer:
for i := 0; i < 3; i++ {
for j := 0; j < 3; j++ {
if i == 1 && j == 1 {
break outer
}
fmt.Printf("i=%d, j=%d\n", i, j)
}
}В этом примере, когда выполняется условие i == 1 && j == 1, команда break outer немедленно прерывает и внутренний, и внешний циклы. Это особенно полезно при поиске в двумерных структурах данных, когда нужно полностью остановить поиск после того, как найдено искомое.
Задание
ЛегкоВ этом задании ты потренируешься использовать операторы break с метками, чтобы выходить из вложенных циклов при поиске в двумерной сетке. Тебе нужно найти в сетке заданное число и немедленно прекратить поиск, как только ты его найдёшь.
Тебе будут переданы два входных значения:
- Строка, представляющая размеры сетки в формате
"rows,cols"(например,"3,4") - Строка, представляющая число, которое нужно найти (например,
"7")
Тебе предоставлена следующая двумерная сетка чисел:
grid := [][]int{
{1, 2, 3, 4},
{5, 6, 7, 8},
{9, 10, 11, 12},
}Твоя задача:
- Использовать значения, уже считанные за тебя в коде выше:
rowsиcols(сколько строк и столбцов сетки нужно просмотреть),targetиgrid - Использовать вложенные циклы с
breakс меткой для поиска в сетке - Когда найдёшь целевое число, вывести
"Found [target] at position ([row], [col])"и немедленно выйти из обоих циклов с помощьюbreakс меткой - Если ты завершишь поиск, не найдя целевое число, вывести
"Target [target] not found"
Позицию нужно указывать с использованием индексации с нуля (первая строка — 0, первый столбец — 0).
Попробуйте сами
// TODO: Напишите свой код ниже
// Используйте вложенные циклы с помеченным break для поиска целевого значения
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Логика и управление потоком
1Продвинутое управление потоком
Оператор switch с `fallthrough`Выход из вложенных цикловПереход к следующей итерации конкретного циклаОператор `goto`Повторение: расширенное управление циклами4Проект: простой список задач
Настройка проектаДобавление задачи2Структуры и методы
Определение методов для структурПолучатели-значенияПолучатели-указателиВыбор получателейМетоды и функцииПовторение: поведение структур5Карты: подробный разбор
Карты структурУказатели как значения картПроверка карт на nilСравнение картПовторение — счётчик частоты слов8Проект: простой складской учёт
Обзор проектаПроверка запасов3Интерфейсы (основы)
Что такое интерфейс?Определение интерфейсаРеализация интерфейсаИспользование типов интерфейсовПустой интерфейсУтверждения типовПереключатель типовПовторение — формы и поведениеПотренируйтесь самостоятельно: Онлайн-компилятор Go