Menu
CoddyTech

什么是集合?

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

set 是由不重复的值组成的集合:每个值要么出现一次,要么完全不出现。你可以向集合提问:“这个值是成员吗?”玩家获得的徽章、已经访问过的关卡和已经被占用的用户名都是集合。

数组会保留你添加的每个副本:

var pickups := ["sword", "shield", "sword"]
print(pickups.size()) # 3

GDScript 没有 Set 类型。你可以改用字典:字典的键是唯一的,因此键就是集合的成员。值不会被使用,按照惯例,每个值都是 true:

var items := {"sword": true, "shield": true}
items["sword"] = true # 已经是成员:不会发生变化
print(items.size()) # 2
print(items.keys()) # ["sword", "shield"]

keys() 会按成员首次添加的顺序以数组形式返回成员。空集合是一个空字典,{}。

集合字面量会列出每个成员,且每个成员只出现一次。在 {} 中两次写入同一个键是错误,会导致程序在运行前停止。

要明确指定集合的类型,请使用带类型的字典:var badges: Dictionary[String, bool] = {}

challenge icon

挑战

简单

一名玩家玩了 4 场比赛,每场获得 1 枚徽章。有些徽章会重复。程序会读取 4 行输入,每行一个徽章名称。

将每枚徽章添加到集合 badges 中,然后打印不同徽章的数量,以及以数组形式表示的集合成员。对于徽章 Sniper、Medic、Sniper 和 Builder,输出为:

Unique badges: 3
["Sniper", "Medic", "Builder"]

亲手试试

extends Node

func _ready():
	var badges := {}
	for i in range(4):
		var badge := OS.read_string_from_stdin()
		# 将 badge 添加到集合中
		pass

	# 输出 badge 的数量和所有 badge
quiz icon自我测试

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

逻辑与流程中的所有课

自己练习: GDScript 在线编译器