陣列的操作
陣列裡的元素就像用let
和var
宣告的常數和變數一樣,用let
宣告的陣列,不只無法新增或刪除元素,裡面的元素的值也無法更改,用var
宣告的陣列,不只可以新增或刪除元素,也可以隨時更改內部元素的值。
let a = [1,2,3] // 宣告一個整數常數陣列 Array<Int> a[0] = 4 // 報錯 a.append(4) // 報錯 var b = [1,2,3] // 宣告一個整數變數陣列 Array<Int> b[0] = 4 // 目前 b = [4,2,3] b.append(5) // 目前 b = [4,2,3,5]
除了append()
以外,還有三個常用的對陣列操作語法或屬性,分別是...
count
是一個Int
屬性,可以取得目前陣列中總共有幾個元素。insert(_,at:)
可以在指定位置新增元素,之後,所有在後方位置的元素會被往後推延。remove(at:)
可以在指定位置移除元素,之後,所有在後方位置的元素會往前遞補。
死背硬記永遠是最糟糕的學習方式,我們隨時可以打開模擬器來實驗一些程式碼,Swift語言的print()
指令可以接受各種各樣的輸入內容,而不只是String
字串或Int
整數這些基礎型態,下面的程式碼中,你隨時可以呼叫print(a)
來直接列印整個陣列的內容。
var a = [1,2,3] // 在編號為1的位置新增一個數字 a.insert(0, at:1) // [1,0,2,3] // 刪除編號為2的位置的數字 a.remove(at:2) // [1,0,3] // 取得目前陣列有幾個元素 let c = a.count // c = 3
還記得for-in
迴圈嗎?for a in 1...5
這樣的程式碼意為「對於所有從1
逐漸增加到5
的整數,個別執行一次迴圈,並在此迴圈內將整數值賦給常數a
」,陣列可以從這樣的語法,非常方便的做出類似的操作:
let 水果 = ["Apple", "Banana", "Orange", "Grape"] for a in 水果 { print(a) }
這段程式碼的意思是「對於所有在陣列水果
中的元素,個別執行一次迴圈,並在此迴圈內將該元素的值賦給常數a
」,由於水果
是一個字串String
的陣列,電腦將自動推斷a
為String
,就好像let a = "Apple"
一樣。
如果用我們比較熟悉的寫法,也就是for a in 1...n
這樣的格式,程式碼則會稍有不同,效果則是一樣的。
let c = 水果.count for a in 0...c-1 { print( 水果[a] ) //取得編號為a的水果 }
注意.count
會取得陣列擁有的元素總數,但陣列的編號則是由0
開始,因此對於一個有五個元素的陣列,1...5
將會產生錯誤的結果,0...4
才是正確的。