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