ネストしたループから抜ける
ラベルを使って複数階層のループから抜けます。
「ネストしたループから抜ける」はCoddyKit上の無料Swift Academyレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはSwift Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Swift Academyコースには全4レッスンが含まれています。
ネストしたループの問題
ネストしたループ内の通常の break は内側のループだけを終了し、外側のループは実行を続けます。
for i in 1...3 {
for j in 1...3 {
if j == 2 { break }
print(i, j)
}
}ラベル付き break で解決する
外側のループにラベルを付け、break outer を使うと、両方のループを一度に終了できます。
outer: for i in 1...3 {
for j in 1...3 {
if i == 2 && j == 2 { break outer }
print(i, j)
}
}
print("escaped")2D グリッドを検索する
ラベル付き break は、2D 検索で対象を見つけたらすぐに処理を停止するのに最適です。
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)ラベルを使わない場合:フラグ
ラベルを使わない方法としてブール値のフラグを使えますが、コードが長くなり、エラーも起きやすくなります。
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 }
}ラベルのほうが簡潔
フラグと比べて、ラベル付き break は意図を直接表現でき、内側のループ後に追加のチェックを行う必要もありません。
outer: for i in 1...3 {
for j in 1...3 {
if i + j == 4 { break outer }
print(i, j)
}
}3重のネスト
ラベルは3階層以上にも対応できます。終了したいループを対象にしてください。
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
深くネストした場所から外側のループの次の反復へ移るには、continue label を使います。
rows: for r in 1...3 {
for c in 1...3 {
if c == 2 { continue rows }
print(r, c)
}
}両方の組み合わせ
同じネスト構造内でラベル付き break と continue を組み合わせ、細かく制御できます。
scan: for i in 1...3 {
for j in 1...3 {
if j == 1 { continue }
if i == 3 { break scan }
print(i, j)
}
}早期終了によるパフォーマンス
答えが見つかった時点ですぐに終了すると、大きなデータセットで不要な反復を避けられます。
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)関数から return する
関数内では、return もすべてのループを一度に終了する簡潔な方法です。
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))方法を選ぶ
ネストしたループの途中で終了する場合はラベル付き break を使い、関数内で処理全体を終了したい場合は return を使います。
outer: for x in 1...3 {
for y in 1...3 {
if x * y >= 4 { break outer }
print(x, y)
}
}クイックチェック
ネストしたループの制御を確認しましょう。
まとめ
通常の break は最も内側のループだけを終了します。外側のループにラベルを付けて break label を使うと、すべての階層を一度に抜けられます。これはブール値のフラグよりも簡潔です。関数内では、return でもすべてを終了できます。
outer: for i in 1...3 {
for j in 1...3 {
if j == 2 { break outer }
print(i, j)
}
}よくある質問
「ネストしたループから抜ける」レッスンは無料ですか?
はい。「ネストしたループから抜ける」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Swift Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Swift Academyコースには全4レッスンが含まれています。
「ネストしたループから抜ける」で何を学びますか?
ラベルを使って複数階層のループから抜けます。 ブラウザで直接実行するハンズオンコードでSwift Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Swift Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのSwift Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。
「ネストしたループから抜ける」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このSwift Academyレッスンでコードを書いて実行できますか?
はい。すべてのSwift Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- breakとcontinueの基礎
- ラベル付き文
- ネストしたループから抜ける
- switchコンテキストでのループ制御