Dictionary<Key, Value>
型
- キーと値のペアを持つコレクション
- キーをもとに値にアクセスする
- キーはアクセス対象の識別に使用されるため一意でなければならない
-
Key
とValue
はプレースホルダ型 - 糖衣構文(シンタックスシュガー)
-
Dictionary<Key, Value>
→[Key: Value]
-
辞書リテラル
辞書リテラル
let dictionary = ["a": 1, "b": 2]
型推論
-
Key
型はキーの型から推論 -
Value
型は値の型から推論辞書リテラルの型推論let dictionary = ["a": 1, "b": 2] // [String : Int]型
-
空の辞書リテラルの場合、要素が存在しないので型推論できない
-
型アノテーションにより型を明示する必要がある
空の辞書リテラルlet dictionary: [String: Int] = [:] // 空の辞書
-
-
キーや値に複数の型が混在する場合、型推論によって型が決定できない
-
型アノテーションにより型を明示する必要がある
複数の型が混在する辞書リテラルlet dictionary: [Hashable: Any] = ["a": 123, 2: "abc"]
-
キーと値にできる型
-
正式には
Dictionary<Key : Hashable, Value>
型-
Key
型には制限がある-
: Hashable
→ 型制約-
Key
型をHashable
プロトコルに準拠したものに制限- ハッシュ値がキーの一意性の担保や探索などに必須であるため
-
-
-
Value
型には制限はない値に配列を持つ辞書リテラル// [String : Array<Int>]型 let dictionary = ["even": [2, 4, 6, 8], "odd": [1, 3, 5, 7, 9]]
-
-
Key
型と異なる型のキーやValue
型と異なる型の値を設定した場合はコンパイルエラー
Dictionary<Key, Value>
型の操作
値へのアクセス
- サブスクリプト
-
引数:
Key
型の値 -
存在しない値にアクセスしようとしても実行時エラーにならない
-
Optional<Value>
型の値を返却 - アクセスした値が
nil
でないことをチェックしてから値を使用する必要がある
値へのアクセスlet dictionary = ["Key": 1] // [String : Int]型 let value = dictionary["Key"] // 1(Optinal<Int>型)
値のnilチェックlet dictionary = ["Key1": "Value1"] let valueForKey1Exists = dictionary["Key1"] != nil // true let valueForKey2Exists = dictionary["Key2"] != nil // false
-
-
値の更新/追加/削除
- サブスクリプト
-
引数:
Key
型の値 -
代入演算子
=
- 指定したキーがすでに存在する場合は値の更新
- キーが存在しない場合は値の追加
- nilを設定した場合は値の削除
値の更新/追加/削除// 更新 var dictionary1 = ["Key": 1] dictionary1["Key"] = 2 dictionary1 // ["Key": 2] // 追加 var dictionary2 = ["Key1": 1] dictionary2["Key2"] = 2 dictionary2 // ["Key1": 1, "Key2": 2] // 削除 var dictionary3 = ["Key": 1] dictionary3["Key"] = nil dictionary3 // [:]
-