昨天我們學了 陣列(Array),適合用來儲存有順序、可重複的資料清單。
但當我們只關心「有哪些項目」而不在意順序或重複時,今天的主角 集合(Set) 就派上用場了!
Set 是一種無順序、不可重複的資料結構,特別適合用來處理像是關鍵字、標籤、分類這類獨特值的集合。今天就來認識 Swift 中的 Set 怎麼宣告、使用、運算與比較。
var uniqueNames: Set<String> // 宣告
var emptySet = Set<Int>() // 空集合
var genres: Set = ["Rock", "Pop"] // 帶值集合
genres = []
var colors: Set = ["Red", "Green"]
print(colors.count) // 印出 2(集合中有兩個元素)
print(colors.isEmpty) // 印出 false(集合不是空的)
方法 | 功能 |
---|---|
insert(_) |
加入(重複無效) |
remove(_) |
移除元素,找不到回 nil |
contains(_) |
查詢是否存在 |
removeAll() |
清空所有元素 |
var fruits: Set = ["Apple"]
fruits.insert("Orange")
fruits.remove("Apple")
print(fruits.contains("Orange")) // true
fruits.removeAll()
contains()
的超高效率你可能會想,Array 也有 contains()
方法,為什麼要用 Set?
答案是速度!當資料量很大時,Set 檢查一個元素是否存在(contains)的速度遠遠快於 Array。這是因為 Set 內部使用了 雜湊(hashing) 技術來優化查詢。
簡單來說:如果你的程式需要頻繁地檢查某個項目是否存在於一個大集合中,使用 Set 會比 Array 效能更好。
Set 沒順序,想排序可加 sorted()
:
let cities: Set = ["Tokyo", "Taipei", "London"]
for city in cities {
print(city) // 順序不固定
}
for city in cities.sorted() {
print(city) // 依字母 A~Z 排序後輸出
}
/* 輸出:
London
Taipei
Tokyo
*/
Set 支援數學上的集合運算,方便做元素的交集、聯集等。
方法名稱 | 功能說明 |
---|---|
intersection(_:) |
兩集合共有的元素(交集) |
symmetricDifference(_:) |
只存在於其中一個集合的元素(對稱差集) |
union(_:) |
兩集合所有元素(聯集) |
subtracting(_:) |
從一集合中減去另一集合的元素 |
let odd: Set = [1, 3, 5]
let even: Set = [2, 4, 6]
let primes: Set = [2, 3, 5]
odd.intersection(primes) // [3, 5]
odd.union(even) // [1, 2, 3, 4, 5, 6]
odd.subtracting(primes) // [1]
odd.symmetricDifference(primes)// [1, 2]
方法名稱 | 功能說明 | 備註 |
---|---|---|
isSubset(of:) |
是否為另一集合的子集合(包含或等於) | A ⊆ B |
isSuperset(of:) |
是否包含另一集合的所有元素 | A ⊇ B |
isStrictSubset(of:) |
是否為另一集合的嚴格子集合(不等於) | A ⊂ B,且 A ≠ B |
isStrictSuperset(of:) |
是否嚴格包含另一集合(不等於) | A ⊃ B,且 A ≠ B |
isDisjoint(with:) |
是否兩集合沒有交集 | 兩集合元素完全不重疊 |
let pets: Set = ["狗", "貓"]
let animals: Set = ["狗", "貓", "牛"]
let cityAnimals: Set = ["鳥", "鼠"]
pets.isSubset(of: animals) // true
animals.isSuperset(of: pets) // true
animals.isDisjoint(with: cityAnimals) // true
今天我們解鎖了 Swift 中處理唯一性資料的強大工具:集合 (Set)!你學會了它「無順序、不重複」的核心特性,並掌握了新增、移除與快速查詢等基本操作。
更厲害的是,你還學會了 Set 獨有的數學超能力——靈活運用交集、聯集、差集等集合運算,以及判斷子集、超集等集合關係。
記住,當資料不重複、順序不重要時,Set 是個又快又穩的選擇!
我們已經學會用 Array 和 Set 來管理「清單」,但如果資料本身帶有「標籤」,例如一本真實世界的字典,我們想透過 「詞彙」(Key)來查找「定義」(Value),該怎麼辦?
明天,我們將解鎖 Swift 中管理結構化資料的利器:字典 (Dictionary)!你將學會如何建立這種強大的「鍵值配對」集合,並掌握透過下標語法 (dictionary[key]
) 來快速新增、修改、查詢甚至刪除資料。我們還會探索如何只遍歷所有的「鍵」或所有的「值」。準備好用最直覺的方式組織你的資料了嗎?
敬請期待《Day 8|Swift 鍵值配對必學!Dictionary 用法一次掌握》