Swift提供的第三种容器类型是集合(set)。集合是一组互不相同的实例的无序组合。这个定义将其与数组区别开来,后者是有序的,并且可以容纳重复的值。
创建集合
import Cocoa
var groceryBag = Set<String>()
我们创建了一个Set实例,声明其持有String。
我们用用insert(_:)方法
可以往这个集合里添加一些数据
groceryBag.insert("Apples")
groceryBag.insert("Oranges")
groceryBag.insert("Pineapple")
遍历集合
for food in groceryBag {
print(food)
}
新的创建集合
var groceryBag = Set(["Apples", "Oranges", "Pineapple"])
var groceryBag: Set = ["Apples", "Oranges", "Pineapple"]
运用集合
Set类型提供了contains(_:)方法来查看其内部是否有某个特殊的元素
let hasBananas = groceryBag.contains("Bananas")
hasBananas的值为假,你的groceryBag里面没有香蕉。
合并
let friendsGroceryBag = Set(["Bananas", "Cereal", "Milk", "Oranges"])
let commonGroceryBag = groceryBag.union(friendsGroceryBag)
这段代码增加了一个新的Set常量来表示你朋友的食品袋,并且用union(_:)方法
把两个集合合并起来。union(_:)
是Set类型的一个方法,接受一个SequenceType参数,并返回一个新的Set实例。该实例包含了两个容器中去重后的元素。简单地说,你可以把字典和集合传给union(_:)
并得到一个包含合并后元素的集合,不会有重复。
交集
let roommatesGroceryBag = Set(["Apples", "Bananas", "Cereal","Toothpaste"])
let itemsToReturn = commonGroceryBag.intersection(roommatesGroceryBag)
集合提供了intersection(_:)
方法来找出同时存在于两个容器中的元素,并用一个新的Set实例返回这些重复的元素。图11-2用韦恩图的形式说明了这种关系。你室友的食品袋和你的有几样重复,不过不是所有都重复。
不相交
let yourSecondBag = Set(["Berries", "Yogurt"])
let roommatesSecondBag = Set(["Grapes", "Honey"])
let disjoint = yourSecondBag.isDisjoint(with: roommatesSecondBag)
根据是否有集合(如yourSecondBag)的任何成员出现在作为参数提供给isDisjoint的序列(如roommatesSecondBag)中,Set的isDisjoint(with:)方法会返回真或假。