比較
特徴 | Array | Set | Dictionary |
---|---|---|---|
順序 | 順序を保持(追加順通り) | 順序を保持しない(順番保証なし) | 順序を保持しない(Swift5.2以降は挿入順を保持するが保証は弱い) |
重複 | 許可する | 許可しない | キーは重複不可、値は重複可 |
検索速度 | O(n) | 平均O(1)(ハッシュ) | 平均O(1)(キー検索) |
インデックスアクセス | 可能(array[0] ) | 不可能 | 不可能(キーでアクセス) |
並び替え | ソート可能 | ソート不可(変換後なら可能) | ソート不可(変換後なら可能) |
用途 | 順序が必要&重複OKなデータ | 順序不要&重複NG&検索高速化 | キーと値をペアで管理 |
型 | [Element] | Set<Element> | [Key: Value] |
使い分けのイメージ
- Array: → 「順番と回数をそのまま持つリスト」
例:買い物リスト(同じ商品を複数回買う可能性あり) - Set → 「順番どうでもいい、種類だけ欲しい袋」
例:イベント参加者のユニークな名前一覧 - Dictionary → 「名前札つきの引き出し」
例:ユーザーIDをキーに、その人のメールアドレスを値として管理
実装サンプル
Playgroundとかにそのままコピペで検証可能
// MARK: - Array(配列)
var fruits = ["Apple", "Banana", "Apple"]
print(fruits) // ["Apple", "Banana", "Cherry"]
// インデックスアクセス
print(fruits[0])
// ソート
let sortedFruits = fruits.sorted()
print(sortedFruits) // ["Apple", "Apple", "Banana"]
// MARK: - Set (集合)
var fruitsSet: Set<String> = ["Apple", "Banana", "Apple"]
print(fruitsSet) // ["Apple", "Banana"] 順序の保証はなし、重複を排除
// 要素の追加
fruitsSet.insert("Orange")
print(fruitsSet) // {"Orange", "Banana", "Apple"}
// メリット: 検索が高速
print(fruitsSet.contains("Apple")) // true
// MARK: - Dictionary (辞書)
var fruitColors: [String: String] = [
"Apple": "Red",
"Banana": "Yellow"
]
// 値の取得
print(fruitColors["Apple"] ?? "Unknown") // "Red"
// 値の更新
fruitColors["Apple"] = "Green"
print(fruitColors) // ["Apple": "Green", "Banana": "Yellow"]
// 新しいキーと値の追加
fruitColors["Orange"] = "Orange"
print(fruitColors) // ["Apple": "Green", "Banana": "Yellow", "Orange": "Orange"]
GPT先生にポケモンで例えるとどうなるって聞いた結果:
