swift編程語(yǔ)言中有三種常用的收集類型,分別為:數(shù)組Array, 集合Set和字典Dictionary。這三種類型都屬于結(jié)構(gòu)體類型,都是以泛型的形勢(shì)定義的,以var聲明一個(gè)收集類型的變量對(duì)象,那么該對(duì)象是以可修改的方式創(chuàng)建的,可以對(duì)該對(duì)象做添加,修改,刪除等操作;以let聲明的對(duì)象,不能改變它的值,也不能對(duì)其做添加,修改,刪除等操作。
第一節(jié) 數(shù)組
數(shù)組是一個(gè)可以存放相同類型的多個(gè)元素對(duì)象的有序線性列表,這些元素可以是任意類型,也可以是元組。但是如果在一個(gè)數(shù)組中出現(xiàn)在了與其他元素類型不同的元素,那么編譯器就會(huì)報(bào)錯(cuò)。
一個(gè)數(shù)組的完成類型為:Array<Element>。這里的Element表示存放到該數(shù)組中元素的類型,還有一種精簡(jiǎn)的表示法:Array[Element]。
eg:
//聲明一個(gè)存放整型元素的數(shù)組對(duì)象array,并對(duì)它創(chuàng)建一個(gè)空數(shù)組
var array = Array<Int>() || var array = [Int]()。
//聲明一個(gè)Double類型常量數(shù)組,創(chuàng)建10個(gè)元素,每個(gè)元素都是2.0
let a = [Double](repeating: 2.0, count: 10)
不過(guò)我們更常用的是直接使用數(shù)組的字面量[1,2,3,4,5],這樣數(shù)組的類型為Int。
//聲明一個(gè)有4個(gè)元素的Double類型數(shù)組
let a = [1.0, 2.0, 3.0, 4.0]
swift 中還提供了+操作符,可以把兩個(gè)數(shù)組拼接在一起,組成一個(gè)新的數(shù)組。
eg:
//將[1, 2, 3] 和 [4, 5, 6]兩個(gè)數(shù)組拼接在一起,組成整型數(shù)組a
//a的元素為[1, 2, 3, 4, 5, 6]
let a = [1, 2, 3] + [4, 5, 6]
//變量數(shù)組b有三個(gè)Bool類型元素,對(duì)于變量數(shù)組可以使用+=為自己添加新元素,但是必須是和自己相同的類型的數(shù)組,不是元素類型對(duì)象
var b = [false, true, false]
b+= [true, false]
//b的元素為[false, true, false, true, false]
print("b = \(b)")
數(shù)組對(duì)象的元素訪問(wèn):如果訪問(wèn)指定元素,可以通過(guò)下標(biāo)操作符[]來(lái)獲得,若索引值超出了數(shù)組本身大小,那么程序會(huì)引發(fā)異常
eg:
let a = [1, 2, 3, 4, 5]
// 這里讀取數(shù)組a的索引0的元素,
// 即第一個(gè)元素,并為常量x初始化
let x = a[0]
數(shù)組的幾個(gè)基本操作
count:獲取數(shù)組個(gè)數(shù)
isEmpty:判斷數(shù)組是否為空
contains(:):判斷數(shù)組是否包含某個(gè)元素
append(:):在該變量數(shù)組最后面添加元素
insert(_:at:):在該變量數(shù)組指定位置添加元素,原本的元素被移動(dòng)到新元素后面
remove(at:):在該變量數(shù)組中移除指定位置的元素
注意:數(shù)組字面量(例如:[1,2,3]),本身是一個(gè)常量,如果我們對(duì)數(shù)組字面量進(jìn)行添加等操作,則會(huì)引起編譯器報(bào)錯(cuò)。
第二節(jié) 集合
一個(gè)集合也能存放多個(gè)相同類型的元素,與數(shù)組不同的是:
1:一個(gè)集合不允許出現(xiàn)兩個(gè)相同的元素
2:集合中的元素是無(wú)序的
3:并不是所有的類型對(duì)象都能作為集合的元素,不過(guò)swift的基本類型都可以
一個(gè)集合的完整類型為:Set<Element: Hashable>,集合沒(méi)有精簡(jiǎn)表示法。
我們可以使用集合的構(gòu)造方法創(chuàng)建一個(gè)空集合,也可以使用數(shù)組字面量構(gòu)建一個(gè)集合
eg:
// 我們通過(guò)集合的構(gòu)造方法來(lái)構(gòu)造一個(gè)空的集合變量setA,
// setA集合對(duì)象的每個(gè)元素都是Int類型對(duì)象
var setA = Set<Int>()”
// 我們這里還可以通過(guò)集合的不定參數(shù)個(gè)數(shù)的構(gòu)造方法來(lái)創(chuàng)建一個(gè)含有指定元素 的集合
setA = Set<Int>(arrayLiteral: 1, 2, 3, 4)”
// 這里我們通過(guò)數(shù)組字面量來(lái)創(chuàng)建一個(gè)集合常量setB,
// 這里需要對(duì)setB顯式指定類型
let setB: Set<Float> = [1.0, 0.5, 2.0]
// 我們也可以用空的數(shù)組字面量來(lái)構(gòu)造一個(gè)空的集合
setA = []”
元素集合的訪問(wèn)不能像數(shù)組通過(guò)索引值,因?yàn)樗菬o(wú)序的,可以通過(guò)for-in循環(huán),也可以通過(guò)flatMap方法,有選擇性的將集合元素取出。
集合的幾個(gè)基本操作
count:獲取集合個(gè)數(shù)
isEmpty:判斷集合是否為空
contains(:):判斷集合是否包含某個(gè)元素
insert(:at:):在該變量集合指定位置添加元素,如以存在,原本的元素被覆蓋,保證唯一性
remove(at:):在該變量集合中移除指定位置的元素
第三節(jié) 字典
字典與數(shù)組和集合不同,它是以一種鍵-值對(duì)的形式存儲(chǔ)元素的,字典中不允許出兩個(gè)相同的鍵,但是不同的鍵可以對(duì)應(yīng)相同的值,字典的元素也是無(wú)序的。字典中鍵的類型與值的類型都是在聲明中直接確定的,每個(gè)鍵的類型應(yīng)該一致,每個(gè)值的類型也應(yīng)該一致,鍵的類型和值的類型可以相同也可以不同。
字典的完整類型為:Dictionary<Key: Hashable, Value>,這里的key表示鍵的類型,value表示值的類型,字典也有精簡(jiǎn)表示法:[key : value].
eg:
//使用字典默認(rèn)的構(gòu)造方式創(chuàng)建一個(gè)空的字典變量
//鍵的類型為String,值得類型為Int
var a = Dictionary<String: Int>()
// 通過(guò)字典的不定參數(shù)個(gè)數(shù)的構(gòu)造方法創(chuàng)建一個(gè)字典對(duì)象,
// 這里通過(guò)元組將字典的鍵值對(duì)進(jìn)行捆綁,
// 元組的第一個(gè)元素是鍵,第二個(gè)元素是值。
a = Dictionary<String, Int>(dictionaryLiteral: ("one", 1), ("two", 2), ("three", 3))
//使用精簡(jiǎn)表示法創(chuàng)建一個(gè)空的字典變量
var a = [String : Int]()
對(duì)字典的值的訪問(wèn)類似于數(shù)組對(duì)元素的訪問(wèn),可以通過(guò)下標(biāo)操作符對(duì)字段的值進(jìn)行訪問(wèn),例如對(duì)于一個(gè)這樣的字典對(duì)象dict[String :Int],我們可以通過(guò)dict["String"] 的方式來(lái)訪問(wèn)鍵“String”對(duì)應(yīng)的值,不過(guò)這里得到的值是一個(gè)Optional對(duì)象,因?yàn)槿绻付ǖ逆I對(duì)應(yīng)的值不存在,會(huì)返回空。
eg:
//聲明一個(gè)字典常量dict,類型為[String : Int]
let dict = ["one":1, "two":2, "three":3]
//訪問(wèn)鍵"one" 對(duì)應(yīng)的值,得到1
let one_value = dict["one"]
//這里訪問(wèn)鍵"four" 對(duì)應(yīng)的值將得到一個(gè)空值
字典的幾個(gè)基本操作
count: 獲取字典的鍵值對(duì)元素個(gè)數(shù)
isEmpty:判斷字典是否為空
keys:獲取字典對(duì)象的所有鍵值
values:獲取字典對(duì)象的所有值
updateValue(_:forKey:):更新一個(gè)鍵對(duì)應(yīng)的值
removeValue(forKey:): 將指定的鍵的元素移除
注意:這里的keys和values返回的類型為L(zhǎng)azyMapCollection,它與集合類型類似,不能通過(guò)下標(biāo)訪問(wèn)元素,一般通過(guò)for-in循環(huán)迭代訪問(wèn);變量字典還能通過(guò)調(diào)用下標(biāo)方式來(lái)新增一個(gè)鍵值對(duì)或修改一個(gè)鍵對(duì)應(yīng)的值。