字典簡介
歡迎!在本節中,我們將探討一種最強大且靈活的資料儲存方式:字典(Dictionary)。雖然你可能已經熟悉串列(Lists)和陣列(Arrays),但字典的運作方式略有不同。我們不是透過資料的位置(例如 0、1、2...)來尋找項目,而是使用唯一的鍵(Key)來定位。
可以把它想像成現實生活中的字典:你不會去查書中的第 500 個單字;你會直接查找特定的單字(鍵),以找到它的定義(值,Value)。這使得搜尋特定資訊的過程變得異常快速且井然有序!
你將會學到:
1. 什麼是字典,以及它如何使用鍵值對(Key-Value pairs)。
2. 為什麼在某些情況下我們使用字典而非串列。
3. 建立鍵與值的基本規則。
3.2.5 什麼是字典?
字典(有時稱為關聯陣列,Associative Array)是一種動態資料結構,以鍵值對的形式儲存資料。與串列不同(串列中的項目是按數字索引排序的),字典將一個唯一的識別碼與一項資訊連結起來。
鍵值對(Key-Value Pair)
字典中的每個條目由兩部分組成:
1. 鍵(Key): 這充當資料的「地址」或「名稱」。它必須是唯一的(不能有兩個相同的鍵)。
2. 值(Value): 這是你想要儲存的實際資料。值則不需要是唯一的。
現實生活類比:學校儲物櫃
想像一排儲物櫃。
- 儲物櫃編號就是鍵。它是唯一的;沒有兩個儲物櫃有相同的編號。
- 裡面的物品(書本、書包、外套)就是值。不同的儲物櫃可能裝著相同類型的書,但你必須使用特定的儲物櫃編號才能找到你的物品。
你知道嗎?你智慧型手機的聯絡人清單基本上就是一個字典!「姓名」是鍵,「電話號碼」則是值。當你想打電話給某人時,你是透過搜尋姓名,而不是搜尋該聯絡人在清單中的位置。
快速複習:
- 鍵(Keys) = 用於搜尋的唯一識別碼。
- 值(Values) = 與該鍵關聯的資料。
字典的運作原理
如果起初覺得有點抽象,別擔心!要記住的最重要一點是:字典是為了速度而設計的。在串列中,如果你想找到一個項目,電腦可能必須從頭開始檢查每一個項目(這稱為線性搜尋,Linear Search)。而在字典中,電腦直接利用鍵來跳轉到該資料所在的位置。
字典的重要規則:
1. 鍵必須是唯一的: 如果你嘗試添加一個已存在的鍵,舊資料通常會被覆蓋。
2. 鍵是不可變的(Immutable): 這是一個比較專業的說法,意思是鍵一旦建立,其名稱就不能更改。如果你想修改,必須先刪除舊的,再建立新的。
3. 無序的: 在許多程式語言中,字典不會按照「從頭到尾」的順序排列項目。它們的組織方式是為了讓尋找鍵的過程更加高效。
字典的範例表:
想像一下儲存學生成績。
鍵 (學生 ID) | 值 (成績)
"S101" | "A"
"S102" | "B"
"S103" | "A"
注意,兩名不同的學生可以擁有相同的成績(值),但每位學生都必須擁有不同的 ID(鍵)。
重點總結: 當你有一個特定的標籤(如 ID 編號或使用者名稱)並想用它來快速尋找資料時,就使用字典。
字典的操作
要在你的程式中有效使用字典,你需要知道如何執行四項基本任務。請記住首字母縮略詞 CRUD:Create(建立)、Read(讀取)、Update(更新)、Delete(刪除)。
1. 新增/建立 (C)
你提供一個新的鍵並為其分配一個值。
範例:將新使用者 "TechWizard" 及其分數 500 加入遊戲字典中。
2. 存取/讀取 (R)
不再使用像 myList[0] 這樣的數字,而是使用鍵。
範例:尋找 "TechWizard" 的分數寫法會是 scoreDict["TechWizard"]。
3. 更新 (U)
如果你為現有的鍵分配一個新值,字典會取代舊的值。
範例:將 "TechWizard" 的分數從 500 修改為 600。
4. 刪除 (D)
你可以完全移除一個鍵及其關聯的值。
範例:移除一個已註銷帳戶的使用者。
要避免的常見錯誤: 嘗試透過直接搜尋「值」來尋找資料。記住,字典是單行道!你必須使用鍵來找到值。嘗試用值來反推鍵是非常慢且困難的。
字典與串列:我該選哪一個?
選擇正確的資料結構是每一位電腦科學學生必備的技能。以下是一個簡單的指南幫助你做決定:
請使用「串列」當:
- 項目的順序很重要(例如排行榜或「待辦事項」清單)。
- 你想透過位置存取項目(例如:「給我第一個項目」)。
- 你有一組簡單且相似的項目,且沒有特殊的標籤。
請使用「字典」當:
- 你有唯一的標籤(鍵)來識別資料。
- 你需要快速找到資料,而不需要遍歷整個結構。
- 資料代表一個記錄(Record)資訊(例如包含「姓名」、「年齡」和「電子郵件」的使用者設定檔)。
記憶小撇步:
- List (串列) = Location (位置: 0, 1, 2...)
- Dictionary (字典) = Description (描述: 鍵的名稱)
重點總結: 字典在查找特定資料時效率更高,而串列則在維持特定序列時表現更好。
總結檢查清單
在你繼續學習之前,請確保你對以下要點充滿信心:
- [ ] 我可以定義鍵值對。
- [ ] 我理解鍵必須是唯一的。
- [ ] 我知道字典是無序的且動態的(它們可以隨時增加或刪除項目)。
- [ ] 我能解釋為什麼字典在搜尋特定記錄時比串列更快。
如果電腦尋找鍵的運作邏輯現在感覺很「神奇」,請別擔心——在這個階段,最重要的事是知道如何「使用」它們來解決問題!