iT邦幫忙

2025 iThome 鐵人賽

DAY 7
0

昨天我們學了 陣列(Array),適合用來儲存有順序、可重複的資料清單。
但當我們只關心「有哪些項目」而不在意順序或重複時,今天的主角 集合(Set) 就派上用場了!

Set 是一種無順序、不可重複的資料結構,特別適合用來處理像是關鍵字、標籤、分類這類獨特值的集合。今天就來認識 Swift 中的 Set 怎麼宣告、使用、運算與比較。

今日學習重點

  • Set 的基礎:學習宣告、建立與「無順序、不重複」的特性
  • 元素操作:掌握新增(insert)、移除(remove)與查詢(contains)
  • 集合運算:探索交集、聯集、差集等強大數學功能
  • 關係判斷:學會判斷子集、超集與不相交等關係

宣告與建立 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()

為什麼要用 Set?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 的集合運算

Set 支援數學上的集合運算,方便做元素的交集、聯集等。
https://ithelp.ithome.com.tw/upload/images/20250919/20177542fMNV3rtjtW.jpg

方法名稱 功能說明
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]

Set 關係判斷

方法名稱 功能說明 備註
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 用法一次掌握》


上一篇
Day 6|Swift 陣列全攻略:有序資料的必備管理術!
下一篇
Day 8|Swift 鍵值配對必學!Dictionary 用法一次掌握
系列文
Swift iOS 開發新手村:從入門到 AI 聊天室9
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言