[Swift コレクションを表す型 第2回] Dictionary型
Swiftのコレクションを表す型、第2回 Dictionary型についてまとめていきます。
Directionary型はその名の通り、辞書を表します。
ただ、ここでいう辞書とはキーと値のペアを持つコレクションであり、キーをもとに値にアクセスする用途になります。
前回のArray型と違って順序関係はありません。
キーはアクセス対象の識別に使用されるので一意でなければなりませんが、値は他のものと重複しても構いません。
本記事は「Swift実践入門」を参考にしています。
辞書リテラル
Directionary型は、["key1":"value1", "key2":"value2"]
のように辞書リテラルで表現できます。
上記の例のように、key
とvalue
を:
でペアにして、それらのペア要素を,
区切りで[]
に列挙します。
型推論について
Dictionaryの中のkey
やvalue
はそれぞれキーの型や値から型推論されます。
例 )
let Dictionary = ["tanaka":175, "satou":170]
上記の例ではキーはString型、値はInt型と推論されます。
要素が一つもない場合やキーや値に複数の型が混在する場合は、辞書リテラルから型が推論できない場合があります。 このような場合は下記の例のように型をこちらから明示してあげる必要があります。
例 )
let Dictionary : [String: Int] = [:]
キーと値にできる型
実はDictionaryのキーに指定できる型は制限があります。キーには一意性が必要になるので、Hashableプロトコルに準拠している必要があります。ということでHashableプロトコルに準拠しているInt型やString型は使用できますが、例えば、Array型のようなHashableプロトコルに準拠していない型は使用できません。
一方でvalue
には型の指定はありません。好きな型を入れることができます。
例えば、要素としてArray型を入れる...なんてこともできちゃいます。
例 )
let Array = ["多い" : [1000, 2000, 3000], "少ない": [1, 2, 3]]
要素へのアクセスや操作
要素へのアクセス
まず値へのアクセスについて説明します。アクセスにはサブスクリプトを使用しますが、引数にはkey
型の値を指定します。
例 )
let access = ["key":1] let access1 = access["key"]
Dictionary型では、サブスクリプトで存在しない値にアクセスした場合、nil
を返します。
復習ですが、nil
を許容するのはOptional型でしたよね?
ということで返却される値はOptional型となります。
以下の例で確認しましょう!!
例 )
let test = ["key1" : 100, "key2" : 2] print(test["key1"]) print(test["key3"])
実行結果
Optional(100) nil
値の操作
値の追加、更新、削除にもサブスクリプトを使用します。
サブスクリプトの引数にKey型の値を指定し、=
を用いて新しい値を設定します。
Array型と違って一つの演算子で追加、更新、削除が行えるところがミソですね。
例 )
// 追加 var dictionary = ["key1" : 1] dictionary["key2"] = 2 // ["key1" : 1, "key2" : 2]となる。 // 更新 var dictionary = ["key"1 : 1] dictionary["key1"] = 2 // ["key1" : 2]となる。 // 削除 var dictionary = ["key" : 1, "key2" : 2] dictionary["key2"] = nil // ["key1" : 1]となる。
終わりに
今回、Swiftのコレクションを表す型、第2回 Dictionary型についてまとめてました。Dictionaryはkeyに対する値のペアでデータを管理できますので便利ですね!値の操作は=
演算子のみで覚えるのは簡単ですが、代入をミスったりしそうで気をつけなければと思いました。。笑