差集与对称差
本课属于 Coddy Swift 学习旅程的“逻辑与流程”单元。第 20 课,共 56 课。
再加上两个集合操作,这套工具就齐全了。
subtracting 会返回第一个集合中不在第二个集合中的元素:
let a: Set = [1, 2, 3, 4]
let b: Set = [3, 4, 5]
a.subtracting(b) // {1, 2}symmetricDifference 返回恰好属于两个集合之一,而不是同时属于两个集合的元素:
a.symmetricDifference(b) // {1, 2, 5}加上 union 和 intersection,这四种运算涵盖了你日常会遇到的所有集合代数问题。
集合成员判断也可以用作过滤器:在 O(1) 时间内检查一个值是否属于某个集合:
let stopwords: Set = ["the", "a", "an"]
let words = ["the", "cat", "sat", "on", "a", "mat"]
let real = words.filter { !stopwords.contains($0) }
// ["cat", "sat", "on", "mat"]挑战
简单读取两行输入,每行都是以逗号分隔的字符串列表。分别将它们视为 currentMembers 和 renewedMembers。
打印三行,每行按字母顺序排序并用 , 连接(如果没有元素,则为空):
Lapsed: <...>> 当前集合减去续期集合New: <...>> 续期集合减去当前集合Stayed: <...>> 两个集合的交集
如果第 1 行输入 alice,bob,cara,第 2 行输入 bob,cara,dan,则输出为:
Lapsed: alice
New: dan
Stayed: bob,cara亲手试试
let current = Set(readLine()!.components(separatedBy: ","))
let renewed = Set(readLine()!.components(separatedBy: ","))
// TODO: 输出 Lapsed(current - renewed)、New(renewed - current)和 Stayed(交集)
这节课包含一个小测验。开始学习即可作答,并记录你的进度。
逻辑与流程中的所有课
自己练习: Swift 在线编辑器