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)時,曾用一位高中生的成績單當資料來繪製圖表: