用数组字面量创建集合
这里创建一个集合favouriteGenres来存储String类型的值,这个集合存储的值被指定为String,所以只能存储String类型的值,并且初始化成三个String类型的值
var favouriteGenres: Set<String> = ["Rock","Classical","Hip hop"]
//favouriteGenres被构造成含有三个初始值的集合
Swift有类型推断功能,如果我们想使用一个数组字面量构造一个Set并且该数组字面量所有元素的类型相同,那么就可以不用声明Set的具体类型,favoriteGenres的构造形式可以采用简化的形式代替:
var favouiteGenres: Set = ["Rock","Classical","Hip hop"]
由于数组的字面量都是统一的类型,swift可以推断出来Set<String>作为favouiteGenres变量的的正确类型
访问和修改一个集合
可以通过Set的属性和方法来访问和修改一个Set:
var favouiteGenres: Set = ["Rock","Classical","Hip hop"]
print("I have \(favouiteGenres.count) favourite music genres.")
if favouiteGenres.isEmpty{
print("As far as music goes, I'm not picky.")
}else{
print("I have particular music preference.")
}
//打印“I have particular music preference.”
通过insert方法来添加一个新的元素
favouiteGenres.insert("Jazz")
通过remove方法来删除一个元素,如果该值是Set的一个元素删除该元素并且返回被删除的元素值,如果Set不包含改值,则返回nil,可以通过removeAll方法来删除所有元素。
if let removedGenres = favouiteGenres.remove("Rock"){
print("\(removedGenres)?I'm over it.")
}else{
print("I never much cared for that.")
}
//打印出"Rock?I'm over it."
使用contains方法来检查Set中是否包含一个特定的值
if favouiteGenres.contains("Funk"){
print("I get up on the good foot.")
}else{
print("It's too funky in here.")
}
//打印"It's too funky in here."
遍历一个集合
可以用for-in循环一个Set中所有值
for genre in favouiteGenres {
print("\(genre)")
}
// Classical
// Jazz
// Hip hop
Swift的Set类型没有特定的顺序,为了按照特定的顺序遍历一个Set中得值,可以使用sort方法,它将根据提供的序列返回一个有序的集合
for genre in favouiteGenres.sort() {
print("\(genre)")
}
// prints "Classical"
// prints "Hip hop"
// prints "Jazz
基础集合操作
下面描述了来两个集合a和b以及通过阴影部分的区域显示集合各种操作的结果。
- 使用intersect方法:取a和b的交集
- 使用exclusiveOr方法:取非a和b的交集部分
- 使用union方法:取a和b的合集
- 使用subtract方法:a和b合集去除()中得值
let oddDigits: Set = [1, 3, 5, 7, 9]
let evenDigits: Set = [0, 2, 4, 6, 8]
let singleDigitPrimeNumbers: Set = [2, 3, 5, 7]
oddDigits.union(evenDigits).sort()
// [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
oddDigits.intersect(evenDigits).sort()
// []
oddDigits.subtract(singleDigitPrimeNumbers).sort()
// [1, 9]
oddDigits.exclusiveOr(singleDigitPrimeNumbers).sort()
// [1, 2, 9]
集合成员关系和相等
- 使用“是否相等”运算符(==)来判断两个集合是否包含全部相同的值。
- 使用isStrictSubsetOf(:)或者isStrictSupersetOf(:)方法来判断一个集合是否是另外一个集合的子集合或者父集合并且两个集合并不相等。
let houseAnimals: Set = ["🐶", "🐱"]
let farmAnimals: Set = ["🐮", "🐔", "🐑", "🐶", "🐱"]
let cityAnimals: Set = ["🐦", "🐭"]
houseAnimals.isSubsetOf(farmAnimals)
// true 使用isSubsetOf(farmAnimals),判断一个集合是否被包含在另外一个集合里面,是不是另外一个集合的子集
farmAnimals.isSupersetOf(houseAnimals)
// true 使用isSupersetOf,判断一个集合是不是另外一个集合的父集合
farmAnimals.isDisjointWith(cityAnimals)
// true 使用isDisjointWith来判断两个集合是不是不含有相同的值
字典
字典,每个value都关联唯一的一个key。字典中得数据项并没有具体的顺序。
注意:
Swift 的Dictionary类型被桥接到Foundation的NSDictionary类。
更多关于在Foundation和Cocoa中使用Dictionary类型的信息,参见 Using Swift with Cocoa and Objective-C (Swift 2.1) 一书。
创建一个空字典
下面的例子创建了一个键的类型是Int型的,值是String类型的。
var namesOfIntergers = [Int:String]()
namesOfIntergers[16] = "sixteen"
//namesOfIntergers现在包含了一个键值对
namesOfIntergers = [:]
//namesOfIntergers又变成了空字典
用字典字面量创建字典
var airport:[String:String] = ["YYZ": "Toronto Pearson", "DUB": "Dublin"]
airport字典是一种[String:String]类型的,这代表着键和值都是String类型,用[key 1: value 1, key 2: value 2, key 3: value 3]
airport["DUB"]
//可以通过这样来访问该键对应的value或者直接给这个赋值,对改键对应的value进行修改。
airports["LHR"] = "London"
//增加一组新的键值对