Menu
CoddyTech

集合差集

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

两个集合的差集包含第一个集合中有、第二个集合中没有的成员。遍历第一个集合,保留第二个集合中没有的成员:

var needed := {"rope": true, "torch": true, "map": true}
var packed := {"torch": true, "apple": true}
var missing := {}
for item in needed:
	if not packed.has(item):
		missing[item] = true
print(missing.keys()) # ["rope", "map"]

集合的顺序很重要。packed 和 needed 的差集是 ["apple"]:你打包了但不需要的内容。

这两个差集合起来就是对称差:只在其中一个集合中的元素。这里是 rope、map 和 apple。

为了检查是否有内容缺失,has_all() 会接收一个数组,并在数组中的每个元素都是字典的键时返回 true:

print(packed.has_all(needed.keys())) # false:缺少绳子和地图
challenge icon

挑战

简单

旅行前,你会比较需要带的东西和已经打包的东西。程序会读取两行内容,分别是需要的物品和已经打包的物品,物品之间用空格分隔,起始代码会构建集合 needed 和 packed。

打印两行,集合成员之间用 , 连接:

  • Missing: 后面跟上需要但没有打包的物品
  • Extra: 后面跟上已经打包但不需要的物品

按照循环遍历的集合中的顺序排列。列表为空时,打印 none。对于以下输入:

rope torch map
torch apple

输出为:

Missing: rope, map
Extra: apple

亲手试试

extends Node

func _ready():
	var needed := {}
	for item in OS.read_string_from_stdin().split(" ", false):
		needed[item] = true
	var packed := {}
	for item in OS.read_string_from_stdin().split(" ", false):
		packed[item] = true

	# 求出两个差集

	# 输出结果
quiz icon自我测试

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

逻辑与流程中的所有课

自己练习: GDScript 在线编译器