調用insert(_:atIndex:)方法在某個具體的索引值之前添加數據項:
var shoppingList = ["milk","eggs"]
shoppingList.insert("maple syrup", atIndex: 0)
在索引是0得位置插上了“maple syrup”
類似的我們可以用removeAtIndex(_:)方法來移除數組中得某一項瓷炮,這個方法在特定的索引中移除該項,并且返回這個被移除的數據項(不需要的時候就可以無視它):
var shoppingList = ["maple syrup","milk","eggs"]
let mapleSyrup = shoppingList.removeAtIndex(0)
mapleSyrup的值為"maple syrup",shoppingList被移除了首個元素。
我們可以用removeLast()方法來移除最后一項,這個方法返回的也是移除的那一個內容:
let eggs = shoppingList.removeLast()
數組的遍歷
我們可以使用for-in循環(huán)來遍歷所有數組中得數據項:
var shoppingList = ["maple syrup","milk","eggs"]
for item in shoppingList{
print(item)
}
如果我們同時需要數據項的值和索引值呼渣,可以使用enumerate()方法來遍歷數組,該方法返回的是一個元組,我們可以把這個元組分解成臨時常量或者變量來進行遍歷:
var shoppingList = ["maple syrup","milk","eggs"]
for (index,value) in shoppingList.enumerate(){
print("Item \(String(index + 1)): \(value)")
}
集合(Sets)
集合是用來存儲相同類型的并且沒有確定順序的值歇式,當集合元素順序不重要的時候且確保每個元素只出現一次的時候,我們就使用集合而不是數組胡野。
注意:swift中得Set被橋接到Foundation中得NSSet類材失。
關于使用Foundation和Cocoa中得Set知識,請看Using Swift with Cocoa and Objective-c硫豆。
集合類型的哈希值
一個類型為了存儲在集合中龙巨,該類型必須是可哈希化的熊响,也就是說該類型必須提供一個方法來計算它的哈希值旨别,一個哈希值是Int類型的,相等的對象Hash值必須相同汗茄,比如說a==b秸弛,也就是說a.hashValue = b.hashValue。
Swift中所有的基本類型(String洪碳,Int递览,Double,Bool)默認都是可以哈贤纾化的绞铃,可以作為集合的值或者字典的值的類型,沒有關聯(lián)值的枚舉成員值默認也是可以hash化的嫂侍。
注意:你可以使用自定義的類型作為集合的值的類型憎兽,或者是字典的鍵的類型,但是你需要使你的自定義類型符合swift標準庫的Hashable協(xié)議吵冒,符合Hashable協(xié)議的類型需要提供一個類型是Int得可讀屬性hashValue纯命。由類型hashValue屬性返回的值不需要在同一程序的不同執(zhí)行周期或者不同程序之間保持相同。
因為Hashable協(xié)議符合Equatable協(xié)議痹栖,所以符合該協(xié)議類型也必須要提供一個“是否相等”運算符(==)的實現亿汞。這個Equatable協(xié)議要求任何符合==實現的實例間都是一種相等的關系,就是說揪阿,對已a疗我,b咆畏,c這三個值來說,==的實現必須滿足:
- a == a(自反性)
- a == b意味著b == a(對稱性)
- a == b && b == c 意味著 a == c(傳遞性)
集合類型的語法
swift中得Set類型被寫作Set<Element>,這里的Element表示Set中允許存儲的類型吴裤,和數組不同的是集合沒有等價的簡化形式旧找。
創(chuàng)建和構造一個空的集合
你可以通過構造器語法創(chuàng)建一個特定類型的空集合,如果上下文提供了類型信息麦牺,比如作為函數的參數或者已知類型的變量或者常量钮蛛,我們可以通過一個空的數組的字面量創(chuàng)建一個空的Set:
var letters = Set<Character>()
print("letters is of type Set<Character> with \(letters.count) items.")
//打印 "letters is of type Set<Character> with 0 items."
letters.insert("a")
//集合中插入“a”
letters = []
//letters現在是一個空得Set,但它仍然是Set<Character>類型