Swift 語言提供Arrays
、Sets
和Dictionaries
三種基本的集合類型用來存儲(chǔ)集合數(shù)據(jù)生蚁。數(shù)組Arrays
是有序數(shù)據(jù)的集。集合Sets
是無序無重復(fù)數(shù)據(jù)的集。字典Dictionaries
是無序的鍵值對(duì)的集编饺。
Swift 語言中的Arrays
、Sets
和Dictionaries
中存儲(chǔ)的數(shù)據(jù)值類型必須明確响驴。
1.數(shù)組
寫法格式1:Array<Element>
寫法格式2:[Element]
-
創(chuàng)建一個(gè)空數(shù)組
var arr = [Int]() 如果代碼上下文提供了類型透且,可以使用空數(shù)組語句創(chuàng)建一個(gè)空數(shù)組 arr.append(3) //包含一個(gè)Int值 arr = [] //顯示是[Int]類型的空數(shù)組
-
創(chuàng)建一個(gè)帶有默認(rèn)值的數(shù)組
var array = [Double](count:3, repeatedValue:0.0) //array 是 [Double]類型的數(shù)組,等價(jià)于[0.0, 0.0, 0.0]
-
兩個(gè)數(shù)組相加創(chuàng)建數(shù)組
var arr + array
-
用字面量構(gòu)造數(shù)組
var array2:[String] = ["aa","bb"]
注意:如果創(chuàng)建的是常量,則不可修改
-
訪問和修改數(shù)組
*用數(shù)組的只讀屬性`count`來獲取數(shù)組的數(shù)量: array.count *用布爾值`isEmpty`作為檢查`count`屬性的值是否為0 array.isEmpty *使用`append(:_)`方法在數(shù)組后面添加新的數(shù)據(jù) array.append("cc") *賦值運(yùn)算符`+=`也可以直接在數(shù)組后面添加數(shù)據(jù) array += ["dd","ee"] *使用下標(biāo)來獲取數(shù)組中的數(shù)據(jù) array[0] *用下標(biāo)來修改某個(gè)已有索引值對(duì)應(yīng)的數(shù)據(jù)值 array[1] = "ff" *可以用下標(biāo)改變一系列值 array[2...3] = ["gg","hh"] *加數(shù)據(jù)到某個(gè)索引 array.insert("qq",atIndex:0) *可以使用下標(biāo)來移除某個(gè)值 array.removeAtIndex(3) *移除數(shù)組的最后一項(xiàng) array.removeLast()
注意:當(dāng)增加或者刪除非最后一行的值時(shí)秽誊,后續(xù)數(shù)據(jù)會(huì)自動(dòng)前移鲸沮。
-
數(shù)組遍歷
for item in array{ print(item) }
如果我們同時(shí)需要數(shù)據(jù)的值和索引值,可以使用enumerate()
方法來進(jìn)行數(shù)組遍歷锅论。
for (index,value) in array.enumerate(){
print("item:\(String(index+1): \(value))")
}
2.集合
一個(gè)類型為了存儲(chǔ)在集合中讼溺,該類型必須是可哈希化的--也就是說最易,該類型必須提供一個(gè)方法來計(jì)算它的哈希值怒坯。一個(gè)哈希值是Int類型的,相等的對(duì)象哈希值必須相同藻懒,比如a==b
,因此必須a.hashValue == b.hashValue
剔猿。
Swift 的所有基本類型(比如String
,Int
,Double
和Bool
)默認(rèn)都是可哈希化的嬉荆,可以作為集合的值的類型或者字典的鍵的類型归敬。沒有關(guān)聯(lián)值的枚舉成員值(在枚舉有講述)默認(rèn)也是可哈希化的鄙早。
注意:
你可以使用你自定義的類型作為集合的值的類型或者是字典的鍵的類型弄慰,但你需要使你的自定義類型符合 Swift 標(biāo)準(zhǔn)庫(kù)中的Hashable協(xié)議。符合Hashable協(xié)議的類型需要提供一個(gè)類型為Int的可讀屬性hashValue蝶锋。由類型的hashValue屬性返回的值不需要在同一程序的不同執(zhí)行周期或者不同程序之間保持相同陆爽。
因?yàn)镠ashable協(xié)議符合Equatable協(xié)議,所以符合該協(xié)議的類型也必須提供一個(gè)"是否相等"運(yùn)算符(==)的實(shí)現(xiàn)扳缕。這個(gè)Equatable協(xié)議要求任何符合==實(shí)現(xiàn)的實(shí)例間都是一種相等的關(guān)系慌闭。也就是說,對(duì)于a,b,c三個(gè)值來說躯舔,==的實(shí)現(xiàn)必須滿足下面三種情況:
a == a(自反性)
a == b意味著b == a(對(duì)稱性)
a == b && b == c意味著a == c(傳遞性)
-
集合類型的語法
var letter = Set<Character>() 如果代碼上下文提供了類型驴剔,可以使用空數(shù)組字面量創(chuàng)建一個(gè)空`Set` letter.insert("a") //包含一個(gè)Character值 letter = [] //顯示是[Character]類型的空數(shù)組
-
數(shù)組字面量創(chuàng)建集合
var letter1:Set<String> = ["aa","bb","cc","dd"]
-
訪問和修改一個(gè)集合
*使用只讀屬性: letter.count *使用布爾屬性檢查`count`屬性是否為0 letter.inEmpty *使用`insert()`方法添加一個(gè)新元素 letter.insert("hh") *用`remove()`方法刪除一個(gè)元素 letter.remove("aa") *刪除所有元素 letter.removeAll() *檢查是否包含特定值 letter.contains("ss")
-
遍歷一個(gè)集合
for genre in letter{ print("\(henre)") }
集合操作
3.字典
字典是一種存儲(chǔ)多個(gè)相同類型的值的容器。每個(gè)值(value)都關(guān)聯(lián)唯一的鍵(key)粥庄,鍵作為字典中的這個(gè)值數(shù)據(jù)的標(biāo)識(shí)符丧失。
-
創(chuàng)建空字典
var dic = [Int:String]() 如果上下文已經(jīng)提供了類型信息,我們可以使用空字典字面量來創(chuàng)建一個(gè)空字典惜互,記作[:](中括號(hào)中放一個(gè)冒號(hào)): dic[16] = "ss" dic = [:]
-
用字典字面量創(chuàng)建字典
[key1 : value1, key2 : value2, key3 : value3]
var dic : [String : String] = ["aa":"AA", "bb":"BB", "cc":"CC"]
-
訪問和修改字典
*通過制度屬性count
來獲取數(shù)量
dic.count
*使用布爾屬性isEmpty
來檢查count
屬性是否等于0
if dic.isEmpty {
print("是空的")
}*使用下標(biāo)語法來添加新的數(shù)據(jù) dic["dd"] = "DD" *使用下標(biāo)來修改值 dic["cc"] = "qq" *使用`updateValue(_:forKey:)`方法可以設(shè)置特定鍵對(duì)應(yīng)的值布讹,和上面的下標(biāo)方法不同的,updateValue(_:forKey:)這個(gè)方法返回更新值之前的原值训堆。這樣使得我們可以檢查更新是否成功描验。 let oldValue = dic.updateValue("ww",forKey:"aa") print (oldValue) // optional(AA)
注意:updateValue(_:forKey:)方法會(huì)返回對(duì)應(yīng)值的類型的可選值。舉例來說:對(duì)于存儲(chǔ)String值的字典坑鱼,這個(gè)函數(shù)會(huì)返回一個(gè)String?或者“可選 String”類型的值膘流。
*使用下標(biāo)來檢索特定鍵對(duì)應(yīng)的值,因?yàn)橛锌赡苷?qǐng)求的鍵沒有值存在,所以返回的值時(shí)可選值
let value = dic["aa"]
print (value) // optional(AA)
*通過給某個(gè)值賦值為`nil`來從字典里移除一個(gè)鍵值對(duì)
dic["bb"] = nil
*也可以通過`removeValueForKey(_:)`方法移除鍵值對(duì)
-
字典遍歷
for (key,value) in dic{ print("\(key):\(value)") } //(key,value)可以隨便取名
-
單獨(dú)遍歷
keys
或者values
*遍歷keys for key in dic.keys{ print(key) } *遍歷values for value in dic.keys{ print(value) }
-
如果需要鍵或者值的集合來作為接受某個(gè)
Array
的參數(shù)呼股,可以直接食用key
或者value
構(gòu)造一個(gè)新數(shù)組let keyArr = [String](dic.keys) let valueARR = [String](dic.values)
Swift 的字典類型是無序集合類型耕魄。為了以特定的順序遍歷字典的鍵或值,可以對(duì)字典的
keys
或values
屬性使用sort()
方法彭谁。