Mẫu từ điển
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 9 trên 78.
Mẫu từ điển liệt kê các khóa và mẫu mà giá trị của chúng phải khớp. Mẫu này khớp với một từ điển có chính xác những khóa đó, theo thứ tự bất kỳ:
var event := {"type": "move", "dir": "left"}
match event:
{"type": "jump"}:
print("Jump!")
{"type": "move", "dir": var d}:
print("Moving ", d)Moving leftGiá trị của "type" phải là "move", còn giá trị của "dir", bất kể đó là gì, được lưu trong d. Một từ điển có khóa không được liệt kê trong mẫu sẽ không khớp. Thêm .. vào cuối để cho phép có thêm khóa:
var hit := {"type": "attack", "damage": 30, "crit": true}
match hit:
{"type": "attack", "damage": _}:
print("Exactly two keys")
{"type": "attack", "damage": var dmg, ..}:
print("Hit for ", dmg)Hit for 30Khóa được viết mà không có giá trị chỉ kiểm tra xem khóa có tồn tại hay không: {"name", ..}: khớp với mọi từ điển có khóa "name". Các điều kiện bảo vệ cũng hoạt động ở đây: {"type": "attack", "damage": var dmg} when dmg > 50:.
Thử thách
DễChương trình đọc một sự kiện trong trò chơi được viết dưới dạng các cặp key=value ngăn cách bằng dấu phẩy, chẳng hạn như type=move,dir=left, rồi lưu sự kiện đó vào từ điển event (đã viết sẵn). Tất cả giá trị đều là chuỗi.
Dùng câu lệnh match với các mẫu từ điển theo thứ tự sau:
- Chính xác các khóa
type("move") vàdir: in raMovingvà hướng di chuyển - Chính xác các khóa
type("attack") vàdamage: in raTaking, lượng sát thương vàdamage typelà"heal", kèm theo các khóa bất kỳ khác: in raHealing- Bất kỳ từ điển nào khác có khóa
type: in raUnknown event:và giá trị củatype - Mọi trường hợp khác: in ra
Invalid event
Với đầu vào type=attack,damage=30, đầu ra là:
Taking 30 damageMột sự kiện như type=move,dir=up,speed=2 có thêm một khóa, nên chương trình in ra Unknown event: move.
Tự làm thử
extends Node
func _ready():
var event := {}
for pair in OS.read_string_from_stdin().split(","):
var kv := pair.split("=")
event[kv[0]] = kv[1]
# Đối chiếu event với các mẫu từ điển
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