Vòng lặp lồng nhau
Thuộc phần Kiến thức nền tảng trong hành trình Swift của Coddy. Bài học 49 trên 86.
Vòng lặp lồng nhau là một vòng lặp nằm bên trong một vòng lặp khác. Vòng lặp bên trong hoàn thành tất cả các lần lặp của nó trong mỗi lần lặp của vòng lặp bên ngoài.
let rows = 3
let cols = 2
for row in 1...rows {
for col in 1...cols {
print("Row \(row), Col \(col)")
}
}
// Đầu ra:
// Row 1, Col 1
// Row 1, Col 2
// Row 2, Col 1
// Row 2, Col 2
// Row 3, Col 1
// Row 3, Col 2Với mỗi giá trị của row, vòng lặp bên trong bắt đầu lại và chạy qua tất cả giá trị của col, từ 1 đến cols. Vì vậy, khi rows = 3 và cols = 2, đoạn code bên trong chạy tổng cộng 6 lần (3 × 2). rows và cols không bao giờ thay đổi: chúng chỉ cho các vòng lặp biết khi nào cần dừng.
Vòng lặp lồng nhau thường được dùng để làm việc với các cấu trúc dạng lưới hoặc tạo mẫu.
Đây là ví dụ in ra một hình chữ nhật đơn giản bằng dấu hoa thị:
for row in 1...2 {
for col in 1...4 {
print("*", terminator: "")
}
print("") // Chuyển sang dòng tiếp theo
}
// Đầu ra:
// ****
// ****terminator: "" ngăn print thêm ký tự xuống dòng, nên các dấu hoa thị xuất hiện trên cùng một hàng. Sau khi vòng lặp bên trong kết thúc, print("") chuyển sang dòng tiếp theo.
Thử thách
DễĐọc hai số nguyên từ đầu vào: rows và cols. Dùng các vòng lặp lồng nhau để in ra một lưới số, trong đó mỗi ô hiển thị tích của số hàng và số cột tương ứng.
Bạn sẽ nhận các đầu vào sau:
- Dòng đầu tiên: số hàng (ví dụ:
"3") - Dòng thứ hai: số cột (ví dụ:
"4")
Yêu cầu:
- Dùng vòng lặp ngoài cho các hàng (từ 1 đến
rows) - Dùng vòng lặp trong cho các cột (từ 1 đến
cols) - In ra tích của số hàng và số cột hiện tại
- Phân tách các giá trị trên cùng một hàng bằng dấu cách
- In mỗi hàng trên một dòng riêng
Gợi ý: Dùng terminator: " " để giữ các giá trị trên cùng một dòng, sau đó dùng print("") sau vòng lặp trong để chuyển sang dòng tiếp theo.
Ví dụ, nếu rows là 3 và cols là 4, đầu ra sẽ là:
1 2 3 4
2 4 6 8
3 6 9 12 Dùng một biến đếm mới cho mỗi vòng lặp (ví dụ: row cho các hàng và col cho các số trong một hàng), rồi so sánh biến đó với rows hoặc cols. Đừng thay đổi chính rows và cols: mỗi hàng đều cần dùng lại cols.
Tự làm thử
let rows = Int(readLine()!)!
let cols = Int(readLine()!)!
// TODO: Viết code của bạn bên dưới
// Dùng các vòng lặp (loop) lồng nhau để in ra bảng nhân
// Vòng lặp ngoài: duyệt qua các hàng (từ 1 đến rows)
// Vòng lặp trong: duyệt qua các cột (từ 1 đến cols)
// In ra tích của row * column
// Dùng print(..., terminator: " ") để giữ các giá trị trên cùng một dòng
// Dùng print("") sau vòng lặp trong để chuyển sang dòng tiếp theoBài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.
Tất cả bài học trong Kiến thức nền tảng
4Các toán tử, phần 1
Toán tử số họcToán tử moduloPhép gán kết hợpÔn tập: phép tính đơn giảnToán tử so sánh7Nhập xuất cơ bản
Hàm in raNội suy chuỗiĐầu vào từ dòngChuyển đổi kiểu dữ liệuÔn tập đến 120Ôn tập đúng hay sai3Giá trị tùy chọn
Giá trị tùy chọn là gìMở gói bằng if letGuard letToán tử gộp nilÔn tập: mở gói an toàn6Ra quyết định
Câu lệnh ifIf và elseÔn tập: máy tính đơn giảnCâu lệnh switchSwitch với khoảng giá trị9Vòng lặp
Vòng lặp for-inVòng lặp whileVòng lặp repeat-whileBreakContinueÔn tập: giai thừaDải giá trị trong vòng lặpVòng lặp lồng nhauÔn tập: đầu vào động12Kiến thức cơ bản về mảng
Khai báo mảngTruy cập phần tửChỉnh sửa mảngPhương thức của mảngÔn tập: Danh sách sản phẩmÔn tập: Mảng đảo ngượcTuple15Trình theo dõi chi tiêu hằng ngày
Tổng quan về dự ánThoát chương trìnhTự luyện tập: Playground Swift