Menu
CoddyTech

any 和 all

本课属于 Coddy GDScript 学习旅程的“逻辑与流程”单元。第 63 课,共 78 课。

any() 和 all() 会针对整个数组提出一个是或否的问题。它们都接受一个函数,该函数会针对单个元素返回 true 或 false:

  • 如果函数对至少一个元素返回 true,any() 就会返回 true。
  • 如果函数对每个元素都返回 true,all() 就会返回 true。
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

一个敌人有 0 点生命值,所以 any() 为 true,而同一个敌人会让 all() 为 false。

两者都会在确定答案后立即停止:any() 遇到第一个 true 时停止,all() 遇到第一个 false 时停止。它们也适用于具名函数,例如 numbers.all(is_even)。

对于空数组,any() 返回 false,因为没有元素通过条件;all() 返回 true,因为没有元素不满足条件。

在条件中使用它们,代替使用标志变量的循环:

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

挑战

简单

程序会读取一行用逗号分隔的分数,并将它们存储在数组 numbers 中。这部分已经写好。

输出两行:

  1. Any perfect: 后面跟着 true,如果至少有一个分数是 100;否则跟着 false
  2. All passed: 后面跟着 true,如果每个分数都大于或等于 50;否则跟着 false

第一行使用 any(),第二行使用 all()。输入 100,75,40 时,输出为:

Any perfect: true
All passed: false

亲手试试

extends Node

func _ready():
	var numbers := []
	for part in OS.read_string_from_stdin().split(","):
		numbers.append(int(part))
	# 用 any() 和 all() 输出这两行
quiz icon自我测试

这节课包含一个小测验。开始学习即可作答,并记录你的进度。

逻辑与流程中的所有课

自己练习: GDScript 在线编译器