Menu
CoddyTech

Mẫu mảng

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 8 trên 78.

Mẫu mảng được viết giống như một giá trị mảng. Mẫu này khớp với một mảng có cùng kích thước, trong đó các phần tử khớp với nhau theo từng vị trí. Mỗi phần tử của mẫu có thể là một giá trị cố định, _ hoặc một phép gán biến:

var point := [0, 7]
match point:
	[0, 0]:
		print("Origin")
	[0, var y]:
		print("On the y-axis at ", y)
	[var x, var y]:
		print("Point ", x, ", ", y)
On the y-axis at 7

Kích thước phải giống nhau: [var x, var y] không khớp với [1, 2, 3]. Đặt .. làm phần tử cuối cùng để cho phép có thêm bất kỳ số lượng phần tử nào, kể cả không có phần tử nào, và viết [] cho mảng rỗng:

var cmd := ["give", "sword", "Ana"]
match cmd:
	[]:
		print("Nothing typed")
	["give", var item, ..]:
		print("Giving ", item)
Giving sword

Guard cũng hoạt động với mẫu mảng: [var a, var b] when a == b: khớp với hai phần tử bằng nhau.

Mẫu mảng chỉ khớp với kiểu Array. Giá trị PackedStringArray mà split() trả về không bao giờ khớp với các mẫu này. Hãy lưu kết quả vào một biến được khai báo là Array để chuyển đổi kiểu dữ liệu:

var words: Array = "go north".split(" ")
match words:
	["go", var dir]:
		print("Heading ", dir)
Heading north
challenge icon

Thử thách

Dễ

Chương trình đọc một điểm được viết dưới dạng x,y và lưu điểm đó vào mảng point dưới dạng hai số nguyên (đã được viết sẵn). Dùng câu lệnh match với các mẫu mảng để in ra vị trí của điểm, theo quy tắc đầu tiên phù hợp:

  • Cả hai đều là 0: Origin
  • x là 0: On the y-axis at y= theo sau là y
  • y là 0: On the x-axis at x= theo sau là x
  • x và y bằng nhau: On the diagonal at theo sau là giá trị đó
  • Các trường hợp khác: Point at (x, y) cùng với hai giá trị

Với đầu vào 0,5, đầu ra là:

On the y-axis at y=5

Với đầu vào 2,7, đầu ra là:

Point at (2, 7)

Tự làm thử

extends Node

func _ready():
	var parts := OS.read_string_from_stdin().split(",")
	var point := [int(parts[0]), int(parts[1])]
	# Đối chiếu point với các mẫu mảng
quiz iconTự kiểm tra

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

Tự luyện tập: Trình biên dịch GDScript online