Swift 提供三種類型的集合來存儲資料:
數組(Array):有序資料的集、集合(Set):無序無重複資料的集、字典(Dictionary):無序的鍵值對集合
這個三個集合存儲的資料類型必須明确。(隻能存單一資料類型)
1) 數組(Array)
Ø 建立數組:Array<Element>或 [Element] ,其中Element為資料類型,推薦簡寫形式。
var someInts= [Int]() //建立一個Int型的空數組
someInts.append(3)//給someInts添加一個值
someInts= [] //someInts為空數組,根據上下文推測其扔為[Int]類型
Ø 建立一個帶有預設值的數組
可以把準備加入新數組的資料項數量(count)和适當類型的初始值(repeatedValue)傳入數組構造函數:
var threeDoubles = [Double](repeating: 0.5, count: 3)
//threeDoubles 是一種 [Double]數組,等價于 [0.5, 0.5, 0.5]
Ø 通過兩個數組相加建立一個數組(“+“号運算)
let anotherThreeDoubles = Array<Double>(repeating: 2.5, count: 3)
// sixDoubles被推斷為 [Double],等價于 [0.5, 0.5, 0.5,2.5, 2.5, 2.5]
Ø 用字面量構造數組
var shoppingList: [String] =["Eggs", "Milk"]
//swift 根據初始化的值推斷類型為[String],類型可省略
var shoppingList = ["Eggs","Milk"]
Ø 通路和修改數組
² 數組下标從0開始到數組的長度-1
² Array.count來擷取數組長度
² Array.isEmpty來判讀數組是否為空
² Array.append(element:Element)來追加資料
² 使用“+=“在數組後面添加一個或多個擁有相同類型的資料項
shoppingList += [“apple”,“chess”]
shoppingList+= ["Chocolate Spread", "Cheese", "Butter"]
² 使用下标擷取數組的某一項
varfirstItem = shoppingList[0]
// 第一項是 "Eggs"
² 可以用下标來改變某個已有索引值對應的資料值
shoppingList[0]= "Six eggs"
// 其中的第一項現在是 "Six eggs"而不是 "Eggs"
² 還可以利用下标來一次改變一系列資料值,即使新資料和原有資料的數量是不一樣的
shoppingList[4...6]= ["Bananas", "Apples"]
//不可以用下标通路的形式去在數組尾部添加新項。
² 調用數組的insert(_:atIndex:)方法來在某個具體索引值之前添加資料項:
shoppingList.insert("MapleSyrup", atIndex: 0)
² 使用removeAtIndex(_:)方法來移除數組中的某一項
let mapleSyrup = shoppingList.removeAtIndex(0)
² 使用removeLast()移除數組的最後一項
let apples = shoppingList.removeLast()
Ø 數組的周遊
² 使用for-in循環來周遊所有數組中的資料項
for item in shoppingList { print(item) }
² 如果我們同時需要每個資料項的值和索引值,可以使用enumerate()方法來進行數組周遊。enumerate()傳回一個由每一個資料項索引值和資料值組成的元組。我們可以把這個元組分解成臨時常量或者變量來進行周遊:
for(index, value) in shoppingList.enumerate() {
print("Item \(String(index + 1)):\(value)")
}
2) 集合(Set)
集合(Set)用來存儲相同類型并且沒有确定順序的值。當集合元素順序不重要時或者希望確定每個元素隻出現一次時可以使用集合而不是數組。
Ø 建立集合
var letters = Set<Character>() //構造函數建立
var fa:Set<String> = [“Rock”,“Classical”,“Hip hop”]
//數組字面量建立集合
//根據swift的推斷能力,<String> 可省略
Ø 通路修改集合
² Set.count來擷取集合長度
² Set.isEmpty來判讀集合是否為空
² Set.insert (element:Element)來插入資料
² Set.remove(member:Element):Element?傳回被删除元素
² Set.removeAll():void删除所有元素
Ø 基本集合操作
兩個集合a 和 b
² a.union(b) :合并
² a.intersect(b) :交集
² a.subtract(b) :a減去b與a交集(相同)的元素
² a.exclusiveOr(b):或操作(取a或b中的值,單不在a和b中的值)
注:上面幾種方法都傳回一個新的集合
² a.isSubsetOf(b):a是否是b的子集合
² a.isSupersetOf(b):a是否是b的父集合
² a.isStrictSubsetOf(b): a是否是b的子集合(a與b不相等)
² a.isStrictSupersetOf(b): a是否是b的父集合(a與b不相等)
² a.isDisjointWith(b):a與b是否有相同的元素
² a == b: a與b是否相等
注:這幾種方法都傳回Bool值
3) 字典(Dictionary)
字典是一種存儲多個相同類型的值的容器。每個值(value)都關聯唯一的鍵(key),鍵作為字典中的這個值資料的辨別符。和數組中的資料項不同,字典中的資料項并沒有具體順序。
Ø 建立字典
Swift 的字典使用Dictionary<Key, Value>定義,其中Key是字典中鍵的資料類型,Value是字典中對應于這些鍵所存儲值的資料類型。
以用
[Key:Value]
這樣快捷的形式去建立一個字典類型。雖然這兩種形式功能上相同,但是後者是首選。
var namesOfIntegers = [Int: String]()
//namesOfIntegers 是一個空的 [Int: String]字典,它的鍵是Int型,值是String型
namesOfIntegers[10]= “10”
namesOfIntegers= [:]
//namesOfIntegers又成為了一個 [Int: String]類型的空字典
² 字面量建立字典
var airports: [String: String] = ["YYZ": "Toronto Pearson", "DUB": "Dublin"]
var airports = ["YYZ": "Toronto Pearson", "DUB": "Dublin"]
Ø 通路和修改字典
² Dictionary.count來擷取集合長度
² Dictionary.isEmpty來判讀集合是否為空
² 用下智語法來添加/修改新的資料項
airports["LHR"] = "London"
下智語法來改變特定鍵對應的值
airports["LHR"] = "Londonss"
² Dictionary.updateValue(_:forKey:)設定或者更新特定鍵對應的值
鍵不存在:設定新值
鍵存在:更新值
傳回:更新之前的值(可選),如果值不存在則傳回nil
airports.updateValue(“DDD”,forKey:“DUB”)
² Dictionary. removeValueForKey(_:)移除鍵值對
鍵值對存在:傳回移除的值
鍵的值不存在:傳回nil
Ø 字典周遊
² 以元組方式周遊
for(airportCode, airportName) in airports {
print("\(airportCode): \(airportName)")
}
// YYZ:Toronto Pearson
// LHR:London Heathrow
² 通路keys或者values屬性,可以周遊字典的鍵或者值:
forairportCode in airports.keys {
print("Airport code: \(airportCode)")
}
// Airport code: YYZ
//Airport code: LHR
forairportName in airports.values {
print("Airport name: \(airportName)")
}
//Airport name: Toronto Pearson
//Airport name: London Heathrow
² 使用keys或者values屬性構造一個新數組:
let airportCodes = [String](airports.keys)
//airportCodes 是 ["YYZ", "LHR"]
let airportNames = [String](airports.values)
//airportNames 是 ["Toronto Pearson","London Heathrow"]