Swift 提供三個主要的集合型態,arrays, sets, and dictionaries。Array是有順序的收集值。Sets是無順序的收集特別的值。Dictionaries是收集無順序的key-value 關聯值。
這三個型態的值不能互相存取,亦即我們可以很放心的從其中一種型態拿同類型的值出來,如dictionary裡面一定是一組一組的key-value關聯。
跟字串一樣,若我們需要一個可變動的集合,用變數宣告即可;反之則用常數宣告。
Array
陣列是有存放相同型態的一個有順序的列表。我們可以在一個陣列裡隨時存取相同型態的值。
陣列的宣告在Swift的全名是Array<T>,其中T是指我們要放哪種型態的值在這個陣列裡。因為名字很長很難記(?)所以Swift又提供了一個簡寫[T]。而且Swift也建議開發者用這個速記的寫法。
var myArray1 = Array<Int>() // 宣告一個空的陣列,裡面的值為整數
var myArray2 = [Int]() // 也是宣告一個空的陣列,裡面的值為整數
myArray1.append(2) //加上一個新的元素,記得型態是依照一開始宣告時所設定好的。
myArray1 = []
我們最後給了myArray1一個空的值, 那麼myArray1就沒有東西了;但值的型態依然是Int,清空了也是一樣。
那如果一開始就給空的呢?
var myArray = []
我們會發現,myArray的型態變成NSArray了。這是以前Objective-C的陣列型態,而且是"不可變的"(我們的宣告是var)。因此宣告一個陣列時千萬記得要設定值的型態,不然我們會連改變(加/減值到陣列裡)都會有問題喔。
Swift的陣列型態還提供了一個方便的初始化,可以設定陣列是某個數量的某個重覆的值,如:
var weightArray = [Double](count:3, repeatedValue:60.0)
// 初始化一個放了三個人體重的陣列,並且一開始都以60公斤為基準。
// 等同於 var weightArray = [60.0, 60.0, 60.0]
Swift的陣列還可以將兩個陣列加在一起變成新的陣列:
var myArray1 = [1, 1, 1]
var myArray2 = [2, 2, 2]
var myArray = myArray1 + myArray2
// myArray = [1, 1, 1, 2, 2, 2]
當然,myArray1跟myArray2裡面值的型態必需相同的才能加。
Accessing and Modifing an Array
我們有一些內建的方法可以用來存取陣列:
print(myArray.count) // 取得目前陣列內的數量
if myArray.isEmpty {
// 判斷陣列是否有值(即數量為零)
print("This arrya is empty")
}
myArray.append(3)
// 在陣列最後加一個新的值
// myArray = [1, 1, 1, 2, 2, 2, 3]
跟字串一樣,我們也可以用+=來串連陣列;若能跟字串串接起來的就是字串,那麼陣列也是由陣列串接起來:
myArray += [4, 4]
// myArray = [1, 1, 1, 2, 2, 2, 3, 4, 4]
若我們知道陣列的索引值,便可利用索引值來存取:
var firstInt = myArray[0] // firstInt = 1
myArray[0] = 9
// myArray = [9, 1, 1, 2, 2, 2, 3, 4, 4]
我們甚至可以將陣列某範圍的值取代掉,如:
myArray[3...7] = [0, 0]
// myArray = [9, 1, 1, 0, 0, 4]
myArray[3...4] = [8, 8, 8, 8, 8]
// myArray = [9, 1, 1, 8, 8, 8, 8, 8, 4]
也可在某個索引插入新的值:
myArray.insert(3, atIndex:2)
// myArray = [9, 1, 3, 1, 8, 8, 8, 8, 8, 4]
跟插入類似,我們也可以移除:
myArray.removeAtIndex(0)
// myArray = [1, 3, 1, 8, 8, 8, 8, 8, 4]
在使用索引時,我們要避免用到非範圍內的索引值,如上例的myArra.removeAtIndex(9) 就會出問題了。
若是我們要移除最後一個時,我們可以用removeLast(),也可用索引來處理;不過Swift建議用removeLast()來避免超出索引的問題產生;除此之外,removeLast()也會回傳最後的值,可以多加利用。
Iterating Over an Array
我們可以利用for-in迴圈將陣列的值取出:
for myInt in myArray {
print(myInt)
}
若我們需要取得陣列索引及相對應的值,可利用enumerate();他會回傳一組tuple分別為索引以及值:
for (index, value) in myArray.enumerate() {
print("index \(index) has value \(value)")
}
留言列表