用數(shù)組字面量創(chuàng)建集合
這里創(chuàng)建一個(gè)集合favouriteGenres來(lái)存儲(chǔ)String類(lèi)型的值,這個(gè)集合存儲(chǔ)的值被指定為String,所以只能存儲(chǔ)String類(lèi)型的值,并且初始化成三個(gè)String類(lèi)型的值
var favouriteGenres: Set<String> = ["Rock","Classical","Hip hop"]
//favouriteGenres被構(gòu)造成含有三個(gè)初始值的集合
Swift有類(lèi)型推斷功能,如果我們想使用一個(gè)數(shù)組字面量構(gòu)造一個(gè)Set并且該數(shù)組字面量所有元素的類(lèi)型相同,那么就可以不用聲明Set的具體類(lèi)型,favoriteGenres的構(gòu)造形式可以采用簡(jiǎn)化的形式代替:
var favouiteGenres: Set = ["Rock","Classical","Hip hop"]
由于數(shù)組的字面量都是統(tǒng)一的類(lèi)型,swift可以推斷出來(lái)Set<String>作為favouiteGenres變量的的正確類(lèi)型
訪問(wèn)和修改一個(gè)集合
可以通過(guò)Set的屬性和方法來(lái)訪問(wèn)和修改一個(gè)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.”
通過(guò)insert方法來(lái)添加一個(gè)新的元素
favouiteGenres.insert("Jazz")
通過(guò)remove方法來(lái)刪除一個(gè)元素,如果該值是Set的一個(gè)元素刪除該元素并且返回被刪除的元素值,如果Set不包含改值,則返回nil,可以通過(guò)removeAll方法來(lái)刪除所有元素。
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方法來(lái)檢查Set中是否包含一個(gè)特定的值
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."
遍歷一個(gè)集合
可以用for-in循環(huán)一個(gè)Set中所有值
for genre in favouiteGenres {
print("\(genre)")
}
// Classical
// Jazz
// Hip hop
Swift的Set類(lèi)型沒(méi)有特定的順序,為了按照特定的順序遍歷一個(gè)Set中得值,可以使用sort方法,它將根據(jù)提供的序列返回一個(gè)有序的集合
for genre in favouiteGenres.sort() {
print("\(genre)")
}
// prints "Classical"
// prints "Hip hop"
// prints "Jazz
基礎(chǔ)集合操作
下面描述了來(lái)兩個(gè)集合a和b以及通過(guò)陰影部分的區(qū)域顯示集合各種操作的結(jié)果。
- 使用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]
集合成員關(guān)系和相等

- 使用“是否相等”運(yùn)算符(==)來(lái)判斷兩個(gè)集合是否包含全部相同的值。
- 使用isStrictSubsetOf(:)或者isStrictSupersetOf(:)方法來(lái)判斷一個(gè)集合是否是另外一個(gè)集合的子集合或者父集合并且兩個(gè)集合并不相等。
let houseAnimals: Set = ["??", "??"]
let farmAnimals: Set = ["??", "??", "??", "??", "??"]
let cityAnimals: Set = ["??", "??"]
houseAnimals.isSubsetOf(farmAnimals)
// true 使用isSubsetOf(farmAnimals),判斷一個(gè)集合是否被包含在另外一個(gè)集合里面,是不是另外一個(gè)集合的子集
farmAnimals.isSupersetOf(houseAnimals)
// true 使用isSupersetOf,判斷一個(gè)集合是不是另外一個(gè)集合的父集合
farmAnimals.isDisjointWith(cityAnimals)
// true 使用isDisjointWith來(lái)判斷兩個(gè)集合是不是不含有相同的值
字典
字典,每個(gè)value都關(guān)聯(lián)唯一的一個(gè)key。字典中得數(shù)據(jù)項(xiàng)并沒(méi)有具體的順序。
注意:
Swift 的Dictionary類(lèi)型被橋接到Foundation的NSDictionary類(lèi)。
更多關(guān)于在Foundation和Cocoa中使用Dictionary類(lèi)型的信息,參見(jiàn) Using Swift with Cocoa and Objective-C (Swift 2.1) 一書(shū)。
創(chuàng)建一個(gè)空字典
下面的例子創(chuàng)建了一個(gè)鍵的類(lèi)型是Int型的,值是String類(lèi)型的。
var namesOfIntergers = [Int:String]()
namesOfIntergers[16] = "sixteen"
//namesOfIntergers現(xiàn)在包含了一個(gè)鍵值對(duì)
namesOfIntergers = [:]
//namesOfIntergers又變成了空字典
用字典字面量創(chuàng)建字典
var airport:[String:String] = ["YYZ": "Toronto Pearson", "DUB": "Dublin"]
airport字典是一種[String:String]類(lèi)型的,這代表著鍵和值都是String類(lèi)型,用[key 1: value 1, key 2: value 2, key 3: value 3]
airport["DUB"]
//可以通過(guò)這樣來(lái)訪問(wèn)該鍵對(duì)應(yīng)的value或者直接給這個(gè)賦值,對(duì)改鍵對(duì)應(yīng)的value進(jìn)行修改。
airports["LHR"] = "London"
//增加一組新的鍵值對(duì)