并集与交集
本课属于 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() 是 []。
挑战
简单两名玩家各自解锁了一些技能。程序会读取两行,分别是第一名玩家和第二名玩家的技能,技能之间用空格分隔。起始代码会创建集合 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
# 构建并集和交集
# 输出结果
这节课包含一个小测验。开始学习即可作答,并记录你的进度。
逻辑与流程中的所有课
自己练习: GDScript 在线编译器