Skip to main content

Swift Array 操作筆記

📌 目錄


基本創建與初始化

宣告空陣列

var emptyArray: [Int] = []
var anotherEmptyArray = [String]()

帶初始值的陣列

let numbers = [1, 2, 3, 4, 5]
let fruits = ["apple", "banana", "orange"]

重複元素初始化

let zeros = Array(repeating: 0, count: 5)  // [0, 0, 0, 0, 0]

常用屬性與方法

基本屬性

let array = [1, 2, 3, 4, 5]

array.count // 5 - 元素數量
array.isEmpty // false - 是否為空
array.first // Optional(1) - 第一個元素
array.last // Optional(5) - 最後一個元素

新增元素

var mutableArray = [1, 2, 3]

mutableArray.append(4) // [1, 2, 3, 4]
mutableArray.insert(0, at: 0) // [0, 1, 2, 3, 4]
mutableArray += [5, 6] // [0, 1, 2, 3, 4, 5, 6]

移除元素

var array = [1, 2, 3, 4, 5]

array.remove(at: 0) // 移除索引 0 的元素
array.removeFirst() // 移除第一個元素
array.removeLast() // 移除最後一個元素
array.removeAll() // 移除全部元素

數字拆分成陣列

方法 1:轉字串再轉回數字

let number = 12345
let digits = String(number).compactMap { Int(String($0)) }
print(digits) // [1, 2, 3, 4, 5]

方法 2:數學方式 (用除法拆)

let number = 12345
var n = number
var digits: [Int] = []

while n > 0 {
digits.insert(n % 10, at: 0) // 取最後一位插到前面
n /= 10
}

print(digits) // [1, 2, 3, 4, 5]

方法 3:Extension 封裝

extension Int {
var digits: [Int] {
return String(self).compactMap { $0.wholeNumberValue }
}
}

let num = 9876
print(num.digits) // [9, 8, 7, 6]

高階函數 - map

用途

集合 (array, set, dictionary) 裡的每個元素,透過一個 function 轉換成另一個值,並回傳新的集合。

語法

let newArray = array.map { element in
// return 轉換後的值
}

範例

let numbers = [1, 2, 3, 4, 5]

// 把每個數字都乘以 2
let doubled = numbers.map { $0 * 2 }
print(doubled) // [2, 4, 6, 8, 10]

// 把數字轉成字串
let strings = numbers.map { "數字: \($0)" }
print(strings) // ["數字: 1", "數字: 2", ...]

高階函數 - reduce

用途

集合裡的所有元素,透過一個規則「歸納」成一個單一的結果。

語法

let result = array.reduce(initialValue) { partialResult, element in
// 回傳新的累積值
}

參數說明:

  • initialValue:歸納的初始值
  • partialResult:上一次計算的累積結果
  • element:目前迭代到的元素

範例

let numbers = [1, 2, 3, 4, 5]

// 計算總和
let sum = numbers.reduce(0) { $0 + $1 }
print(sum) // 15

// 計算乘積
let product = numbers.reduce(1) { $0 * $1 }
print(product) // 120

// 把字串組合起來
let words = ["Hello", "World", "!"]
let sentence = words.reduce("") { $0 + " " + $1 }
print(sentence) // " Hello World !"

其他常用方法

過濾 - filter

let numbers = [1, 2, 3, 4, 5, 6]
let evenNumbers = numbers.filter { $0 % 2 == 0 }
print(evenNumbers) // [2, 4, 6]

排序 - sorted

let numbers = [3, 1, 4, 1, 5, 9]
let sortedNumbers = numbers.sorted() // [1, 1, 3, 4, 5, 9]
let reversedNumbers = numbers.sorted(by: >) // [9, 5, 4, 3, 1, 1]

查找 - contains, firstIndex

let fruits = ["apple", "banana", "orange"]

fruits.contains("banana") // true
fruits.firstIndex(of: "orange") // Optional(2)

🔹 map vs reduce 對比

  • map:輸入集合 → 輸出集合 (1 對 1 轉換)
  • reduce:輸入集合 → 輸出單一值 (多對 1 歸納)

組合使用範例

let numbers = [1, 2, 3, 4, 5]

// 先平方,再求和
let result = numbers
.map { $0 * $0 } // [1, 4, 9, 16, 25]
.reduce(0, +) // 55

print(result) // 55