Swift 程式語言中,有三種資料合輯的類型:陣列(Array)、集合(Set)、字典(Dictionary),所謂資料合輯(Collection)是指許多同類型的資料放在一起,當做一個變數或常數來處理。陣列是其中最基本也最重要的,相信在過去課程中,已看過陣列與for迴圈結合所產生的強大威力。
陣列、集合、字典在語法上非常類似,都用方括號 [ ] 來表示資料合輯,個別資料稱為「元素(Element)」,元素之間以逗號(,)分隔。三者異同比較如下表:
- | 陣列(Array) | 集合(Set) | 字典(Dictionary) |
---|---|---|---|
與for迴圈配合使用 | 可 | 可 | 可 |
元素須同類型資料 | 是 | 是 | 是 |
元素屬性 | 一元(unary) | 一元(unary) | 二元(binary) key: value |
元素次序(前後關係) | 有 | 無 | 無 |
以索引存取個別元素 | 是 | 是 | 是 |
索引方式 | 整數(如 0, 1, 2,…) | 可自訂 | 鍵(key) |
元素能否重複 | 可 | 不可 | 鍵(key)不可,值(value)可 |
範例 | [95, 34, 95, 22] | [”Aa”, “BB”] | [”膚色”: ”Black”, “血型”: “O”] |
類型定義方式 | [類型], 如 [String] | Set<類型> | [類型1: 類型2], 如 [String: Int] |
空值 | [] 空陣列 | [] 空集合 | [:] 空字典 |
陣列是有次序的資料合輯,應用範圍最廣;字典(dictionary)最常用在資料查詢;集合用途較少。
陣列與字典最大區別如下:一般陣列通常以整數當索引,如「陣列[0]」是第1個元素、「陣列[1]」是第2個元素…;字典則是任何資料類型都可當索引,例如「字典[”膚色”]」取得字典中與 “膚色” 對應的值、「字典[”血型”]」取得與 “血型” 對應的值,有點像在查字典的意思。
我們先來看一小段字典的範例程式:
// Swift dictionary sample code
// Created by Heman, 2023/03/06
let 價格表: [String: Int] = [
"可樂": 25,
"煎餅": 30,
"花生": 15
]
print(價格表["煎餅"]) // (1)會輸出什麼值?
print(價格表["蚵仔煎"]) // (2)會產生錯誤嗎?
print(價格表.count) // (3)多少個元素?
字典的元素語法是不是跟之前學過的JSON很像?沒錯,兩者是有關聯的。
字典就像一個兩欄資料表,第一欄稱為資料鍵,簡稱「鍵(key)」,第二欄稱為資料值,簡稱「值(value)」,兩者成對以冒號(:)隔開,用鍵可以立刻找到對應的值,對查詢搜索很方便。
JSON 內容同樣是鍵與值的配對(key-value pair),常當做網路資料庫的交換格式。可不要小看鍵-值配對的結構,任何複雜的資料庫其實都可以轉化成鍵-值配對的結構!
以上範例執行結果,第一行會列印出 Optional(30),而不是 30 — 特別注意,用字典查詢的值一定都是 Optional,因為隨時都可能查詢不到。若查詢不到,並不會產生錯誤,而是傳回 nil(如第二行print()),表示無此資料 — 只要鍵的內容符合資料類型,語法上就會被接受。第三行輸出3,表示有3個元素。
我們再舉第2個範例,在第4單元第12課學習圖表(Chart)時,曾用一位高中生的成績單當資料來繪製圖表: