Swift 陣列

Swift 陣列使用有序列表儲存同一型別的多個值。相同的值可以多次出現在一個數組的不同位置中。

Swift 陣列會強制檢測元素的型別,如果型別不同則會報錯,Swift 陣列應該遵循像Array<Element>這樣的形式,其中Element是這個陣列中唯一允許存在的資料型別。

如果建立一個數組,並賦值給一個變數,則建立的集合就是可以修改的。這意味著在建立陣列後,可以通過新增、刪除、修改的方式改變數組裡的專案。如果將一個數組賦值給常量,陣列就不可更改,並且陣列的大小和內容都不可以修改。


建立陣列

我們可以使用構造語法來建立一個由特定資料型別構成的空陣列:

var someArray = [SomeType]()

以下是建立一個初始化大小陣列的語法:

var someArray = [SomeType](repeating: InitialValue, count: NumbeOfElements)

以下例項建立了一個型別為 Int ,數量為 3,初始值為 0 的空陣列:

var someInts = [Int](repeating: 0, count: 3)

以下例項建立了含有三個元素的陣列:

var someInts:[Int] = [10, 20, 30]

訪問陣列

我們可以根據陣列的索引來訪問陣列的元素,語法如下:

var someVar = someArray[index]

index 索引從 0 開始,即索引 0 對應第一個元素,索引 1 對應第二個元素,以此類推。

我們可以通過以下例項來學習如何建立,初始化,訪問陣列:

import Cocoa

var someInts = [Int](repeating: 10, count: 3)

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("itread01")
someStrs += ["Google"]

for item in someStrs {
   print(item)
}

以上程式執行輸出結果為:

Apple
Amazon
itread01
Google

如果我們同時需要每個資料項的值和索引值,可以使用 String 的 enumerate() 方法來進行陣列遍歷。例項如下:

import Cocoa

var someStrs = [String]()

someStrs.append("Apple")
someStrs.append("Amazon")
someStrs.append("itread01")
someStrs += ["Google"]

for (index, item) in someStrs.enumerated() {
    print("在 index = \(index) 位置上的值為 \(item)")
}

以上程式執行輸出結果為:

在 index = 0 位置上的值為 Apple
在 index = 1 位置上的值為 Amazon
在 index = 2 位置上的值為 itread01
在 index = 3 位置上的值為 Google

合併陣列

我們可以使用加法操作符(+)來合併兩種已存在的相同型別陣列。新陣列的資料型別會從兩個陣列的資料型別中推斷出來:

import Cocoa

var intsA = [Int](repeating: 2, count:2)
var intsB = [Int](repeating: 1, count:3)

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