Swiftのdictionaryの使い方と初期化方法をまとめました

Dictionaryは配列のようなものですが、キーと値をセットで格納するという特徴があります。値とキーを紐づけてキーで検索するものなので、辞書という意味でDictionaryです。

このページではDictionaryの使い方や初期化について解説します。

Dictionaryの使い方

Dictionaryの宣言方法は以下です。

var 変数名:Dictionary<String,String> = [key1 : value1, key2 : value2, key3 : value3, …]

Stringで型指定していますが、型指定を入れずに宣言することもできます。具体的には以下のようになります。

var 変数名 = [key1 : value1, key2 : value2, key3 : value3, …]

Dictionaryの場合も変数や定数と同じで、varなら値を後からでも変更できますが、letだと定数なので後から値を変更することができません。それでは上記を踏まえて具体的なサンプルコードを紹介します。

var foods =
["チャーハン": 500, "天津飯": 500, "天丼": 700, "かつ丼": 650, "いくら丼": 550]
for (key,value) in foods {
    print("\(key)は\(value)円です。")
}

上記のコードを実行すると、以下のようにコンソール出力されます。

チャーハンは500円です。
天津半は500円です。
天丼は700円です。
かつ丼は650円です。
いくら丼は550円です。

var foods:Dictionary<String,Int> =
["チャーハン": 500, "天津飯": 500, "天丼": 700, "かつ丼": 650, "いくら丼": 550]
for (key,value) in foods {
    print("\(key)は\(value)円です。")
}

また以下のように型指定を間違えるとエラーが出ます。

var foods:Dictionary<String,String> =
["チャーハン": 500, "天津飯": 500, "天丼": 700, "かつ丼": 650, "いくら丼": 550]
for (key,value) in foods {
    print("\(key)は\(value)円です。")
}

上記のコードを実行すると、以下のようにエラーが出力されます。

error: cannot convert value of type ‘Int’ to expected dictionary value type ‘String’

Dictionaryの初期化や更新

Dictionaryの基本的な使い方は以上の通りですが、初期化や追加、更新ができます。Dictionaryの初期化の方法は初期値なしの宣言方法とほぼ同じです。

var test:[String:String] = [:]

このコードは宣言なのでvarを付けていますが、初期化の場合すでにあるDictionaryに対してなのでvarやletは付けません。以下のようにDictionary名のみです。

test:[String:String] = [:]

初期値なしのDictionaryの宣言と、Dictionaryの初期化はほとんど同じ記述になります。次にDictionaryの追加と更新のコードです。要素の追加には以下のようにupdateValueメソッドを使用します。

配列名. updateValue(値, forKey: key)

Dictionaryは値を追加する際にも値とキーをセットで格納します。第一引数にはDictionaryに追加する値を、第二引数にキーを指定します。まだないキーを指定した場合は要素が追加され、すでに存在するキーを指定した場合は値が書き換えられます。以下はサンプルコードです。

var foods =
["チャーハン": 500, "天津飯": 500, "天丼": 700, "かつ丼": 650, "いくら丼": 550]

foods.updateValue(300, forKey: "チャーハン")
foods.updateValue(130, forKey: "杏仁豆腐")

for (key,value) in foods {
    print("\(key)は\(value)円です。")
}

上記のサンプルコードを実行すると、以下のようにコンソール出力されます。

チャーハンは300円です。
天津飯は500円です。
天丼は700円です。
かつ丼は650円です。
いくら丼は550円です。
杏仁豆腐は130円です。

すでに存在したチャーハンは値段が書き換えられ、まだキーがなかった杏仁豆腐は追加されました。updateValueメソッドはなぜか引数の値とキーが逆になっていますが、逆にならない方法もあります。具体的には以下のように記述します。

var foods =
["チャーハン": 500, "天津飯": 500, "天丼": 700, "かつ丼": 650, "いくら丼": 550]

foods["チャーハン"] = 300
foods["杏仁豆腐"] = 130

for (key,value) in foods {
    print("\(key)は\(value)円です。")
}

このコードを実行すると出力結果は以下のようになります。

チャーハンは300円です。
天津飯は500円です。
天丼は700円です。
かつ丼は650円です。
いくら丼は550円です。
杏仁豆腐は130円です。

Dictionaryの削除

Dictionaryを削除するためには、removeValueメソッドを使用します。構文は以下です。

配列名.removeValue(forKey:key)

引数のキーは削除対象のキーです。サンプルコードを紹介します。

var foods =
["チャーハン": 500, "天津飯": 500, "天丼": 700, "かつ丼": 650, "いくら丼": 550]

//要素の削除
foods.removeValue(forKey:"チャーハン")

for (key,value) in foods {
    print("\(key)は\(value)円です。")
}

実行すると以下のようになります。

天津飯は500円です。
天丼は700円です。
かつ丼は650円です。
いくら丼は550円です。

Dictionaryの使用方法について解説してきました。使い方はほぼ配列と同じですが、キーと値がセットになっている分便利な面もあります。Swiftだけでなく他のプログラミング言語にも存在する概念なので、すでに概念自体は知っている方もいたかと思います。

配列とDictionaryのどちらが良いというわけではありませんが、知名度と使用頻度で言えば配列の方が圧倒的に上かと思います。理由としては、単純に値とキーをセットで指定するのが手間だからでしょう。

キーと値をセットにすることでキーで値を取り出せるというメリットがありますが、すべてのキーを書くのは面倒で、なおかつコードも長くなります。なので配列との使い分けとしては、キーを指定する必要がある場合にDictionaryを使うのが良いのではないでしょうか。

キーを指定する必要がある場合とは、後からキーで取得する可能性等がある場合です。逆に言えば、キーを使用する予定がないなら配列を使用した方が良いかと思います。目的の応じて使い分けることが重要です。

▼Swift関連の記事一覧
1, 【Swiftのフリーランス案件情報付き】仕事やエンジニアの将来性・学習方法!
2, 繰り返し処理に使えるSwiftのfor文とfor-in文の便利な使い方まとめ
3, 条件分岐に便利なSwiftのSwitch文の使い方まとめ
4, アプリ開発でよく使うSwiftの4つの文法を解説します
5, Swiftのoptional型を使いこなすための7つのポイント
6, Swiftで文字列を扱うためのstring型の使い方
7, Swiftでの配列の宣言・初期化・代入・参照の方法まとめ
8, 実際の開発現場でのSwiftの変数・定数の使われ方を解説します
9, Swiftでif let文を使って出来ることとguard letの使い分けに関して
10, 開発現場でよく使うSwiftのif文の条件分岐をまとめました
11, SwiftにおけるTupleの使い方とわかりやすく解説します
12, 初心者にオススメのSwiftのサンプルコードをまとめてみました
13, SwiftのString、Int、Doubleの型の変換方法をまとめました
14, 開発現場で役に立つSwiftのクロージャの使い方
15, Swiftでwhileを使って上手に繰り返し処理を行おう
16, Swiftで文字列の長さをチェックするのにlengthを使ってみよう
17,(この記事)Swiftのdictionaryの使い方と初期化方法をまとめました
18, Swiftの値渡しと参照渡しに関するまとめ
19, Swiftで参照渡ししたい時のinoutの便利な使い方
20, Swiftでfor-in文でindexを使いたい時の方法まとめ
21, Swiftでのクラスとstruct(構造体)の使い分けを解説します

人気記事

編集部おすすめ記事

この記事を読んだ人はこんな記事を読んでいます