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 // [:]
-