Swift-集合1_陣列Array

https://github.com/oli2022/pic/blob/main/%E6%88%AA%E5%9C%96%202022-07-06%20%E4%B8%8B%E5%8D%882.07.29.png?raw=true

集合型別

  • 陣列( Array )
    • 是有序的集合
    • 索引從0開始
    • 元素要同一型態
  • 字典(Dictionary)
    • 元素以:key ⇒ value 的形式構成 ( 鍵 ⇒ 值 )
    • 通常是用 key 來進行存取
    • key 不能重覆
    • 無序的集合
    • 元素型態可不一樣
  • 集合( Set )
    • 與陣列類似
    • 無序的集合
    • 集合內的值不可重複
    • 元素要同一型態
  • 元組( 雜堆 )( Tuple )
    • 元素有順序(可用 index 或 key)
    • 一旦決𤴓元素內容,就不能再更動
    • 元素、index 、key 不限型態,可以混用

陣列 Array

宣告方式是使用中括號

var score: [Int] = [80, 88, 90]

陣列也支援型別推斷,所以程式碼也可以簡化如下:

var score = [80, 88, 90]

建立空陣列:

var score: [Int] = []

使用索引取值:

var score = [80, 88, 90]
print(score[0]) // 80
print(score[1]) // 88
print(score[2]) // 90

🔎 【 陣列操作 】新增

使用 append 函式來進行新增,新增的資料會放在最尾端:

var score = [80, 88, 90]
score.append(100)
print(score)

// [80, 88, 90, 100]

🔎 陣列操作 】刪除

使用 remove(at: )函式來進行刪除,是根劇索引來刪除資料。

var score = [60, 78, 90]
score.remove(at: 0)
print(score)

// [78, 90]

🔎 陣列操作 】修改

透過索引值來更改更改

var score = [60, 78, 90]
score[0] = 666
print(score)

// [666, 78, 90]

🔎 陣列操作 】合併

可以用加法運算子 + 來合併:

var scoreA = [60, 78, 90]
var scoreB = [59, 90, 85]
let score = scoreA + scoreB
print(score)

// [60, 78, 90, 59, 90, 85]

🔎 陣列操作 】排序

使用 sorted(by: )函式來排序:

var score = [60, 78, 90, 100]
let scoreA = score.sorted(by: >)
let scoreB = score.sorted(by: <)
print(scoreA) // [100, 90, 78, 60]
print(scoreB) // [60, 78, 90, 100]

🔎 陣列操作 】insert(_:at:)

將資料插入指定索引處

var score = [60, 78, 90, 100]
score.insert(666, at:2)
print(score) // [60, 78, 666, 90, 100]

📌 集合的列舉化 enumerationize the elements in Collection

絕大部份的集合物件都有一個 enumerated() 函數。

把一個集合物件數字化其實就是為集合的每一個元素依序配一個整數號碼。

import Foundation

var arr = ["John","Mary","Tom","Peter","Ares"]

var es:EnumeratedSequence<[String]>
es = arr.enumerated()
for (index,value) in es {
    print("數列化: \(index)\(value)")
}

// 結果:
數列化: 0John
數列化: 1Mary
數列化: 2Tom
數列化: 3Peter
數列化: 4Ares
Program ended with exit code: 0

enumeration數列化就是把集合的元素編號之後(從0開始),重新裝成一種叫做EnumeratedSequence<要數列化的集合>的新集合
只要是集合就可以被迭代,因為EnumeratedSequence每個元素都有兩個值(編號,原來的元素)。

這種元素有一個以上內容的集合要迭代的話,for 後面必須提供足夠的變數去承接,這時就是”雜堆”登場的場合之一。