Swift 數組
Swift 陣列使用有序列表儲存相同類型的多個值。相同的值可以多次出現在一個陣列的不同位置。
Swift 陣列會強制偵測元素的類型,如果類型不同則會報錯,Swift 陣列應該遵循像Array<Element>這樣的形式,其中Element是這個陣列中唯一允許存在的資料類型。
如果建立一個數組,並賦值給一個變量,則創建的集合就是可以修改的。這意味著在建立數組後,可以透過新增、刪除、修改的方式來改變數組裡的項目。如果將陣列賦值給常數,則陣列不可更改,且陣列的大小和內容都不可以修改。
建立陣列
我們可以使用建構語法來建立一個由特定資料型別構成的空數組:
var someArray = [SomeType]()
以下是建立一個初始化大小陣列的語法:
var someArray = [SomeType](count: NumbeOfElements, repeatedValue: InitialValue)
以下實例建立了一個類型為Int ,大小為3,初始值為0 的空數組:
var someInts = [Int](count: 3, repeatedValue: 0)
以下實例建立了含有三個元素的陣列:
var someInts:[Int] = [10, 20, 30]
存取陣列
我們可以根據陣列的索引來存取陣列的元素,語法如下:
var someVar = someArray[index]
index 索引從0 開始,及索引0 對應第一個元素,索引1 對應第二個元素,以此類推。
我們可以透過以下實例來學習如何創建,初始化,存取數組:
import Cocoa var someInts = [Int](count: 3, repeatedValue: 10) var someVar = someInts[0] print( "第一个元素的值 \(someVar)" ) print( "第二个元素的值 \(someInts[1])" ) print( "第三个元素的值 \(someInts[2])" )
以上程式執行輸出結果為:
第一个元素的值 10 第二个元素的值 10 第三个元素的值 10
修改數組
你可以使用append() 方法或賦值運算子+= 在數組末尾添加元素,如下所示,我們初始化一個數組,並向其添加元素:
import Cocoa var someInts = [Int]() someInts.append(20) someInts.append(30) someInts += [40] var someVar = someInts[0] print( "第一个元素的值 \(someVar)" ) print( "第二个元素的值 \(someInts[1])" ) print( "第三个元素的值 \(someInts[2])" )
以上程式執行輸出結果為:
第一个元素的值 20 第二个元素的值 30 第三个元素的值 40
我們也可以透過索引修改陣列元素的值:
import Cocoa var someInts = [Int]() someInts.append(20) someInts.append(30) someInts += [40] // 修改最后一个元素 someInts[2] = 50 var someVar = someInts[0] print( "第一个元素的值 \(someVar)" ) print( "第二个元素的值 \(someInts[1])" ) print( "第三个元素的值 \(someInts[2])" )
以上程式執行輸出結果為:
第一个元素的值 20 第二个元素的值 30 第三个元素的值 50
遍歷陣列
我們可以使用for-in循環來遍歷所有數組中的資料項:
import Cocoa var someStrs = [String]() someStrs.append("Apple") someStrs.append("Amazon") someStrs.append("php") someStrs += ["Google"] for item in someStrs { print(item) }
以上程式執行輸出結果為:
Apple Amazon php Google
如果我們同時需要每個資料項的值和索引值,可以使用String 的enumerate() 方法來進行陣列遍歷。實例如下:
import Cocoa var someStrs = [String]() someStrs.append("Apple") someStrs.append("Amazon") someStrs.append("php") someStrs += ["Google"] for (index, item) in someStrs.enumerate() { print("在 index = \(index) 位置上的值为 \(item)") }
以上程式執行輸出結果為:
在 index = 0 位置上的值为 Apple 在 index = 1 位置上的值为 Amazon 在 index = 2 位置上的值为 php 在 index = 3 位置上的值为 Google
#合併陣列
我們可以使用加法運算元(+)來合併兩種已存在的相同類型數組。新陣列的資料型別會從兩個陣列的資料型別推論出來:
import Cocoa var intsA = [Int](count:2, repeatedValue: 2) var intsB = [Int](count:3, repeatedValue: 1) var intsC = intsA + intsB for item in intsC { print(item) }
以上程式執行輸出結果為:
2 2 1 1 1
count 屬性
我們可以使用count 屬性來計算陣列元素個數:
import Cocoa var intsA = [Int](count:2, repeatedValue: 2) var intsB = [Int](count:3, repeatedValue: 1) var intsC = intsA + intsB print("intsA 元素个数为 \(intsA.count)") print("intsB 元素个数为 \(intsB.count)") print("intsC 元素个数为 \(intsC.count)")
以上程式執行輸出結果為:
intsA 元素个数为 2 intsB 元素个数为 3 intsC 元素个数为 5
isEmpty 屬性
我們可以透過唯讀屬性isEmpty來判斷陣列是否為空,傳回布林值:
import Cocoa var intsA = [Int](count:2, repeatedValue: 2) var intsB = [Int](count:3, repeatedValue: 1) var intsC = [Int]() print("intsA.isEmpty = \(intsA.isEmpty)") print("intsB.isEmpty = \(intsB.isEmpty)") print("intsC.isEmpty = \(intsC.isEmpty)")
以上程式執行輸出結果為:
intsA.isEmpty = false intsB.isEmpty = false intsC.isEmpty = true