數組
數組使用有序列表存儲同一類型的多個值。相同的值可以多次出現在一個數組的不同位置中。
- Swift中的Array類型被橋接到Foundation中的NSArray類。
數組的簡單語法
寫 Swift 數組應該遵循像Array這樣的形式,其中Element是這個數組中唯一允許存在的數據類型。我們也可以使用像[Element]這樣的簡單語法。儘管兩種形式在功能上是一樣的,但是推薦較短的那種
創建一個空數組
使用構造方法創建一個由特殊數據類型構成的空數組:
var intArray = [Int]()
//通過構造函數的類型, intArray的值類型被推斷爲[Int]
可以通過大括號將數組置空
//向數組中追加元素,此刻數組intArray中元素個數爲0
intArray.append(100)
//此時數組intArray中元素個數爲1
intArray = []
//此刻intArray中數組爲空,但由於開始初始化數組intArray爲[Int]型的,雖然現在數組爲空,但其仍爲[Int]型數組。
創建一個數組(帶默認值)
var threeInts = [Int](count: 5, repeatedValue: 100)
print("threeInts is \(threeInts)")
//output: [100, 100, 100, 100, 100]
var threeIntsTwo = [100, 100, 100, 100, 100, 100, 100, 100, 100, 100]
//Swift會根據數組中的元素自動推斷出數組的值類型 , 強制在數組中添加不同類型的元素顯然是不合法的
通過兩個數組相加創建一個數組
可以使用加法操作符(+)來組合兩種已存在的相同類型的數組,所得出的新數組的數據類型會從兩個相加的數組中推斷出來。
var arrayOne = Array(count: 3, repeatedValue: 10)
var arrayTwo = Array(count: 4, repeatedValue: 9)
var arrayAdd = arrayOne + arrayTwo
// arrayAdd : [10, 10, 10, 9, 9, 9, 9] 數據類型爲Int
// 如果將兩個不同數據類型的數組相加 會報錯
用字面量構造數組
可以使用字面量進行數組構造,字面量是一系列由逗號分隔並由方括號包含的數值:
[value1, value2, value3, value4......]
創建一個goodList的並存儲String的數組:
var goodList : [String] = ["car", "toy"]
//goodList已經被構造並且擁有兩個初始項
goodList變量被聲明爲“字符串值類型的數組”,記作[String].因爲這個數組被規定只有String一種數據結構,所以其中只能存儲String類型。由Swift的推斷機制,當用”car”和”toy”來初始化數組時,數組就被自動匹配成爲字符串值類型的數組。所以,goodList數組也可以寫成下面的形式,其結果和上面的一樣:
var goodList = ["car", "toy"]
因爲所有字面量中的值都是相同的類型,Swift可以推斷出[String]是goodList中變量的正確類型。
訪問和修改數組
- 獲取數組元素的個數
var count = goodList.count
- 檢測數組是否爲空
if goodList.isEmpty{
print("The goodList is empty.")
}else{
print("The goodList is not empty.")
}
- 追加元素
goodList.append("pen")
- 使用加法賦值運算符(+=)可以直接在數組後面添加一個或多個擁有相同類型的數據項
goodList += ["ink", "ice"]
- 直接使用下標語法來獲取數組中的數據項。
var firstItem = goodList[0]
- 通過下標修改已有索引值對應的數據值
goodList[2] = "pencil"
- 可以通過下標改變一系列的數據值,即使新數據和原有數據的數量是不一樣的
//將goodList數組第一和第二個元素替換成“apple” 兩個換成一個 後面的一次向前移動
goodList[1...2] = ["apple"];
//Tips:不可在數組的末尾執行此項操作
- 插入元素
goodList.insert("orange", atIndex: 0)
- 移除元素,在指定的位置
let temp = goodList.removeAtIndex(0)
//直接移除最後一項
let temp1 = goodList.removeLast()
- 排序
goodList.sort { (let str1, let str2) -> Bool in
return str1 < str2
}
goodList.sortInPlace { (let str1, let str2) -> Bool in
return str1 < str2
}
數組的遍歷
- 使用for-in循環來遍歷所有數組中的數據項
for item in goodList{
print(item)
}
- 如果同時需要使用每個數據項和索引值,可以使用enumerate()方法來進行數組遍歷。enumerate()返回一個由每一個數據項索引值和數據值組成的元組。可以把這個元組分解成爲臨時常量或者變量進行遍歷。
for (index, value) in goodList.enumerate(){
print("item --> \(item) , value --> \(value)")
}