Menu
CoddyTech

any và all

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

any() và all() đặt câu hỏi có hoặc không về toàn bộ một mảng. Cả hai đều nhận một hàm trả về true hoặc false cho một phần tử:

  • any() trả về true nếu hàm trả về true cho ít nhất một phần tử.
  • all() trả về true nếu hàm trả về true cho mọi phần tử.
var enemy_hp = [30, 0, 12]
print(enemy_hp.any(func(hp): return hp == 0))
print(enemy_hp.all(func(hp): return hp > 0))
true
false

Một kẻ địch có 0 HP, nên any() là true, và chính kẻ địch đó khiến all() là false.

Cả hai đều dừng ngay khi biết được kết quả: any() dừng ở giá trị true đầu tiên, all() dừng ở giá trị false đầu tiên. Chúng cũng hoạt động với các hàm có tên, chẳng hạn như numbers.all(is_even).

Với một mảng rỗng, any() trả về false vì không có phần tử nào vượt qua điều kiện, còn all() trả về true vì không có phần tử nào không vượt qua điều kiện.

Dùng chúng trong điều kiện thay cho vòng lặp có biến cờ:

var inventory = ["sword", "key", "rope"]
if inventory.any(func(item): return item == "key"):
	print("The door opens")
challenge icon

Thử thách

Dễ

Chương trình đọc một dòng điểm được phân tách bằng dấu phẩy và lưu vào mảng numbers. Phần này đã được viết sẵn.

In ra hai dòng:

  1. Any perfect: theo sau là true nếu có ít nhất một điểm là 100, nếu không thì là false
  2. All passed: theo sau là true nếu mọi điểm đều từ 50 trở lên, nếu không thì là false

Dùng any() cho dòng đầu tiên và all() cho dòng thứ hai. Với đầu vào 100,75,40, đầu ra là:

Any perfect: true
All passed: false

Tự làm thử

extends Node

func _ready():
	var numbers := []
	for part in OS.read_string_from_stdin().split(","):
		numbers.append(int(part))
	# In ra hai dòng bằng any() và all()
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