Các mẫu phổ biến 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 17 trên 78.
Một vài cách duyệt qua lưới xuất hiện lặp đi lặp lại. Các ví dụ này dùng một lưới vuông có kích thước n:
var grid := [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
]
var n := grid.size()Đường chéo. Trên đường chéo chính, chỉ số hàng bằng chỉ số cột: grid[i][i]. Trên đường chéo phụ, từ góc trên bên phải đến góc dưới bên trái, chỉ số cột là n - 1 - i. Một vòng lặp là đủ:
for i in range(n):
print(grid[i][i], " ", grid[i][n - 1 - i])1 3
5 5
9 7Hàng, cột và đường viền. Cố định một chỉ số rồi lặp qua chỉ số còn lại. Hàng trên cùng là grid[0] và hàng dưới cùng là grid[n - 1]. Với một cột, giữ cố định c trong khi thay đổi hàng:
var left_total := 0
for r in range(n):
left_total += grid[r][0] # cột bên trái: 1 + 4 + 7
print(left_total) # 12Các ô lân cận. Trong các trò chơi dạng lưới, bạn thường xem các ô xung quanh một vị trí: phía trên, phía dưới, bên trái và bên phải. Lưu bốn bước này thành một mảng gồm các cặp [row, column], rồi bỏ qua những bước đi ra ngoài lưới:
var r := 0
var c := 1
for step in [[-1, 0], [1, 0], [0, -1], [0, 1]]:
var nr: int = r + step[0]
var nc: int = c + step[1]
if nr >= 0 and nr < n and nc >= 0 and nc < n:
print(grid[nr][nc])Ô grid[0][1] nằm trên cạnh trên cùng, nên có 3 ô lân cận: 5, 1 và 3.
Thử thách
DễViết một hàm có tên print_patterns với một tham số là grid: một mảng 2D hình vuông gồm các số nguyên (khai báo dưới dạng grid: Array). Hàm in ra sáu dòng, các giá trị cách nhau bằng một dấu cách:
Main diagonal:và các ô có chỉ số hàng bằng chỉ số cộtAnti-diagonal:và các ô từ góc trên bên phải đến góc dưới bên tráiTop row:và hàng đầu tiênBottom row:và hàng cuối cùngLeft column:và cột đầu tiên, từ trên xuống dướiRight column:và cột cuối cùng, từ trên xuống dưới
Với mảng [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15, 16]], đầu ra là:
Main diagonal: 1 6 11 16
Anti-diagonal: 4 7 10 13
Top row: 1 2 3 4
Bottom row: 13 14 15 16
Left column: 1 5 9 13
Right column: 4 8 12 16Các bài kiểm tra sẽ tự gọi print_patterns(). Đừng gọi hàm này và cũng đừng trả về giá trị nào.
Tự làm thử
func print_patterns(grid: Array):
# Viết code ở đây
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