Vòng lặp lồng nhau với mảng 2 chiều
Thuộc phần Logic và luồng chương trình trong hành trình GDScript của Coddy. Bài học 14 trên 78.
Để duyệt qua mọi ô trong mảng 2D, hãy đặt một vòng lặp bên trong một vòng lặp khác. Vòng lặp bên ngoài duyệt qua các hàng, còn vòng lặp bên trong duyệt qua các ô của hàng hiện tại:
var grid := [[1, 2, 3], [4, 5, 6]]
var total := 0
for row in grid:
for cell in row:
total += cell
print(total) # 21Khi cần biết vị trí của từng ô, hãy lặp qua các chỉ số. r là chỉ số hàng, c là chỉ số cột, còn vòng lặp bên trong dùng grid[r].size(), tức độ dài của hàng hiện tại:
for r in range(grid.size()):
for c in range(grid[r].size()):
grid[r][c] *= 10
print(grid) # [[10, 20, 30], [40, 50, 60]]Việc gán giá trị cho cell trong vòng lặp (loop) for cell in row không làm thay đổi lưới, vì cell chứa một bản sao của số đó. Hãy thay đổi các ô thông qua chỉ số của chúng, như trên.
Vòng lặp lồng nhau cũng tạo nên một lưới. Tạo một hàng mới bên trong vòng lặp ngoài, điền các phần tử vào hàng đó trong vòng lặp trong, rồi thêm hàng vào:
var town := []
for r in range(3):
var row := []
for c in range(4):
row.append(".")
town.append(row)
town[1][2] = "P"
for row in town:
print("".join(row))....
..P.
....Bạn phải tạo hàng bên trong vòng lặp ngoài. Khi bạn thêm một mảng vào, các hàng sẽ dùng chung mảng đó chứ không tạo bản sao: nếu bạn thêm cùng một row ba lần, cả ba hàng đều là một mảng, và town[1][2] = "P" sẽ đặt P vào mọi hàng.
Thử thách
DễVẽ bản đồ của một thị trấn. Chương trình đọc bốn số nguyên, mỗi số trên một dòng: số hàng, số cột, hàng của người chơi và cột của người chơi. Vị trí của người chơi luôn nằm trong bản đồ.
- Tạo
grid, một mảng 2D có số hàng và số cột tương ứng, trong đó mọi ô đều là".". Dùng các vòng lặp lồng nhau và tạo một mảng hàng mới cho mỗi hàng. - Đặt ô tại vị trí của người chơi thành
"P". - In bản đồ ra, mỗi hàng trên một dòng, không có khoảng trắng giữa các ô.
Với các đầu vào 3, 4, 1 và 2, đầu ra là:
....
..P.
....Tự làm thử
extends Node
func _ready():
var rows := int(OS.read_string_from_stdin())
var cols := int(OS.read_string_from_stdin())
var player_row := int(OS.read_string_from_stdin())
var player_col := int(OS.read_string_from_stdin())
var grid := []
# Tạo lưới bằng các vòng lặp lồng nhau
# Đặt người chơi lên bản đồ
# In bản đồ ra
pass
Bà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 Logic và luồng chương trình
1Chuyên sâu về chuỗi
Các phương thức của chuỗiTìm kiếm trong chuỗiThay thế và xóa khoảng trắngTách và nốiÔn tập: Kiểm tra tên người dùng7Kiểu liệt kê
Kiểu liệt kê là gì?Định nghĩa kiểu liệt kêCác giá trị của kiểu liệt kêKiểu liệt kê trong matchÔn tập: đèn giao thông10Hàm nâng cao
Trả về nhiều giá trịHàm lambda phần 1Hàm lambda phần 2Ôn tập: sắp xếp bằng lambdaHàm đệ quy phần 1Hàm đệ quy phần 2Ôn tập: tính tổng mảng lồng nhau13Hệ thống quản lý hàng tồn kho
Tổng quan dự ánThêm mặt hàng2Ra quyết định nâng cao
So khớp với biếnĐiều kiện bảo vệ trong so khớpMẫu mảngMẫu từ điểnKiểm tra thành viênÔn tập: Bộ phân tích lệnh5Ứng dụng sổ liên lạc
Hiển thị menuThêm liên hệ8Trình quản lý hồ sơ học sinh
Tổng quan dự ánThêm học sinh3Mảng nhiều chiều
Cơ bản về mảng 2 chiềuTruy cập phần tử trong mảng 2 chiềuVòng lặp lồng nhau với mảng 2 chiềuÔn tập: mảng 2 chiềuMảng răng cưaCác mẫu phổ biến với mảng 2 chiềuÔn tập: bàn cờ6Tập hợp với từ điển
Tập hợp là gì?Từ điển như một tập hợpThêm và xóaHợp và giaoHiệu tập hợpÔn tập: Xóa phần tử trùng lặp9Tổng hợp dữ liệu nâng cao
Tính tổng các giá trịTìm giá trị nhỏ nhất và lớn nhấtSắp xếp tùy chỉnhÔn tập: Sắp xếp từ điểnTự luyện tập: Trình biên dịch GDScript online