LoginSignup
14
19

More than 5 years have passed since last update.

[Swift]Dictionary<Key, Value>型

Posted at

Dictionary<Key, Value>

  • キーと値のペアを持つコレクション
  • キーをもとに値にアクセスする
  • キーはアクセス対象の識別に使用されるため一意でなければならない
  • KeyValueはプレースホルダ型
  • 糖衣構文(シンタックスシュガー)
    • 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 // [:]
    
14
19
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
19