Swift Academy · Lekcja

Wychodzenie ze zagnieżdżonych pętli

Używanie etykiet do opuszczania wielu poziomów pętli.

Lekcja 3 z 413 kroki

Wychodzenie ze zagnieżdżonych pętli to bezpłatna lekcja Swift Academy na CoddyKit. To lekcja 3 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Swift Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Swift Academy zawiera 4 lekcji w sumie.

Problem zagnieżdżonej pętli

Zwykłe break wewnątrz zagnieżdżonej pętli kończy tylko pętlę wewnętrzną, pozostawiając uruchomioną pętlę zewnętrzną.

for i in 1...3 {
    for j in 1...3 {
        if j == 2 { break }
        print(i, j)
    }
}

break z etykietą rozwiązuje problem

Należy przypisać etykietę pętli zewnętrznej i użyć break outer, aby jednocześnie zakończyć obie pętle.

outer: for i in 1...3 {
    for j in 1...3 {
        if i == 2 && j == 2 { break outer }
        print(i, j)
    }
}
print("escaped")

Wyszukiwanie w siatce 2D

break z etykietą doskonale nadaje się do zatrzymania wyszukiwania w siatce 2D natychmiast po znalezieniu celu.

let grid = [[1, 2, 3], [4, 5, 6]]
var position = (-1, -1)
find: for r in 0..<grid.count {
    for c in 0..<grid[r].count {
        if grid[r][c] == 5 {
            position = (r, c)
            break find
        }
    }
}
print(position)

Bez etykiet: flaga

Alternatywą bez etykiet jest użycie flagi logicznej, ale rozwiązanie to jest bardziej rozwlekłe i podatne na błędy.

var stop = false
for i in 1...3 {
    for j in 1...3 {
        if i + j == 4 { stop = true; break }
        print(i, j)
    }
    if stop { break }
}

Etykiety są czytelniejsze

W porównaniu z flagami break z etykietą bezpośrednio wyraża intencję i eliminuje dodatkowe sprawdzanie po zakończeniu pętli wewnętrznej.

outer: for i in 1...3 {
    for j in 1...3 {
        if i + j == 4 { break outer }
        print(i, j)
    }
}

Potrójne zagnieżdżenie

Etykiety można stosować na trzech lub większej liczbie poziomów; należy wskazać dowolną pętlę, którą trzeba zakończyć.

top: for a in 1...2 {
    for b in 1...2 {
        for c in 1...2 {
            if c == 2 { break top }
            print(a, b, c)
        }
    }
}

continue z etykietą w zagnieżdżeniu

Należy użyć continue label, aby z głębi zagnieżdżenia przejść do następnej iteracji zewnętrznej pętli.

rows: for r in 1...3 {
    for c in 1...3 {
        if c == 2 { continue rows }
        print(r, c)
    }
}

Łączenie obu sposobów

W tej samej zagnieżdżonej strukturze można połączyć break i continue z etykietami, uzyskując precyzyjną kontrolę.

scan: for i in 1...3 {
    for j in 1...3 {
        if j == 1 { continue }
        if i == 3 { break scan }
        print(i, j)
    }
}

Wydajność wczesnego wyjścia

Wyjście natychmiast po znalezieniu odpowiedzi pozwala uniknąć niepotrzebnych iteracji na dużych zbiorach danych.

let data = Array(1...100)
var firstBig = -1
loop: for chunk in stride(from: 0, to: data.count, by: 10) {
    for k in chunk..<min(chunk + 10, data.count) {
        if data[k] > 25 {
            firstBig = data[k]
            break loop
        }
    }
}
print(firstBig)

Powrót z funkcji

Wewnątrz funkcji return jest innym przejrzystym sposobem na jednoczesne zakończenie wszystkich pętli.

func findPair(_ target: Int) -> (Int, Int)? {
    for i in 1...5 {
        for j in 1...5 {
            if i * j == target { return (i, j) }
        }
    }
    return nil
}
print(findPair(12) ?? (-1, -1))

Wybór podejścia

Do zakończenia zagnieżdżonych pętli w miejscu należy preferować break z etykietą, a return stosować wewnątrz funkcji, gdy należy całkowicie z niej wyjść.

outer: for x in 1...3 {
    for y in 1...3 {
        if x * y >= 4 { break outer }
        print(x, y)
    }
}

Szybkie sprawdzenie

Sprawdź sterowanie zagnieżdżonymi pętlami.

Podsumowanie

Zwykłe break kończy tylko najbardziej wewnętrzną pętlę. Należy oznaczyć pętlę zewnętrzną i użyć break label, aby jednocześnie wyjść ze wszystkich poziomów; jest to czytelniejsze niż flaga logiczna. Wewnątrz funkcji również return kończy całe wykonanie.

outer: for i in 1...3 {
    for j in 1...3 {
        if j == 2 { break outer }
        print(i, j)
    }
}
Bezpłatny start

Ucz się Swift dzięki korepetycjom AI — za darmo

Pisz i uruchamiaj kod w przeglądarce, otrzymuj natychmiastową pomoc od korepetytora AI dostępnego 24/7 i kontynuuj naukę w sieci lub w aplikacji.

Kursy
122
Lekcje
409

Często zadawane pytania

Czy lekcja „Wychodzenie ze zagnieżdżonych pętli” jest bezpłatna?

Tak — pełny tekst „Wychodzenie ze zagnieżdżonych pętli” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Swift Academy, przejdź na CoddyKit PRO. Kurs Swift Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „Wychodzenie ze zagnieżdżonych pętli”?

Używanie etykiet do opuszczania wielu poziomów pętli. Ćwiczysz Swift Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć Swift Academy?

Nie wymagamy żadnego doświadczenia. Swift Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 3 z 4.

Ile czasu zajmuje lekcja „Wychodzenie ze zagnieżdżonych pętli”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji Swift Academy?

Tak. Każda lekcja Swift Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Podstawy break i continue
  2. Instrukcje z etykietami
  3. Wychodzenie ze zagnieżdżonych pętli
  4. Sterowanie pętlą w kontekście switch
← Powrót do Swift Academy