Menu
CoddyTech

并集与交集

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

两个集合可以通过两种常见方式合并:

  • 并集包含属于任一集合的所有元素。
  • 交集只包含同时属于两个集合的元素。

GDScript 没有用于这些操作的运算符,所以你需要用循环来实现。要计算并集,请将两个集合的成员都添加到一个新集合中。如果某个成员同时存在于两个集合中,它们会落在同一个键上:

var mia := {"forest": true, "cave": true}
var leo := {"cave": true, "tower": true}
var either := {}
for place in mia:
	either[place] = true
for place in leo:
	either[place] = true
print(either.keys()) # ["forest", "cave", "tower"]

因为每个值都是 true,所以调用一次 merged() 就能得到相同的并集:var either := mia.merged(leo)。它会返回一个新字典,并且不会更改 mia。

要找交集,遍历一个集合,并保留另一个集合中也有的成员:

var both := {}
for place in mia:
	if leo.has(place):
		both[place] = true
print(both.keys()) # ["cave"]

当这些集合没有共同成员时,交集为空,并且 both.keys() 是 []。

challenge icon

挑战

简单

两名玩家各自解锁了一些技能。程序会读取两行,分别是第一名玩家和第二名玩家的技能,技能之间用空格分隔。起始代码会创建集合 first 和 second。

打印这两个集合的并集和交集,成员之间用 , 连接:

  • All skills: 后面接并集:第一名玩家的技能,然后是第二名玩家的新技能
  • Shared skills: 后面接交集,顺序按照第一名玩家的技能排列;如果他们没有共同技能,则输出 none

对于以下输入:

jump dash
dash swim

输出为:

All skills: jump, dash, swim
Shared skills: dash

亲手试试

extends Node

func _ready():
	var first := {}
	for skill in OS.read_string_from_stdin().split(" ", false):
		first[skill] = true
	var second := {}
	for skill in OS.read_string_from_stdin().split(" ", false):
		second[skill] = true

	# 构建并集和交集

	# 输出结果
quiz icon自我测试

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

逻辑与流程中的所有课

自己练习: GDScript 在线编译器