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