辞書
辞書
・辞書のイメージ図
※上記例では、100, 90, 80といった値(value)に、国語, 数学, 英語というデータ名(key)をつけています。
配列で扱った添字の代わりに、任意でデータ名(key)をつけることができます。
このkeyは重複したものを入れることができません。
また、辞書は値が「オプショナル型※」になります。
※次の節にて詳しい説明があります。今の段階では、「何も無い」値も入れることができ、値を扱う時に専用の処理が必要、とだけ認識してください。
宣言と代入 let/var 辞書名: [keyの型: valueの型] = [key: value]
1 2 3 4 5 6 7 |
//後から中身の追加・削除・変更不可 let tax: [String: Float] = ["日用品": 0.1, "食料品": 0.08] print(tax) //後から中身の追加・削除・変更可 var gameScore: [String: Int] = ["Aさん": 100, "Bさん": 70, "Cさん": 90] print(gameScore) |
辞書も他と同様、letとvarを正しく使い分けましょう。
また、上記をPlaygroundで実行すると、出力時に順番がランダムになっています。
配列では順に添字がつくため「順序」がありましたが、辞書は任意のkeyによって管理するため順序がありません。
値の取り出し 辞書名[key]
1 2 3 4 5 6 7 8 |
// イミュータブル(不変)な辞書 let tax: [String: Float] = ["日用品": 0.1, "食料品": 0.08] print(tax["食料品"]!) //任意の値の取り出し&Optional型の値を取り出す時の処理(!をつける) // ミュータブル(可変)な辞書 var gameScore: [String: Int] = ["Aさん": 100, "Bさん": 70, "Cさん": 90] gameScore["Aさん"] = 80 //任意の値の書き換え print(gameScore["Aさん"]!)//Optional型の値を取り出す時の処理(!をつける) |
ここで試しに、宣言時にどこかで重複するkeyを入れてみて、エラーになることを確認しましょう。
また、値を取り出す時(メモリに格納された値を取り出す時)は、「Optional型の値を取り出す時」の処理を行わなければいけません。(処理の1つ:末尾に!をつける)
こちらは次節にて詳しく行いますので、辞書から値を取り出す時は特殊な処理が必要なんだな、と認識しておいてください。
空の辞書の宣言 var 辞書名 = [keyの型: valueの型]()
1 2 3 |
var dic = [String:String]() dic["りんご"] = "1個" dic["ごりら"] = "1匹" |
また、上記を省略せずに書くと var dic: [String:String] = [String:String]()となります。型推論が行われていますね。
以下、辞書の扱いに関する書き方となります。ぜひPlaygroundで試してみてください。
見やすさのため、value = 値、 key=キーとしています。
要素の追加
・キーがすでに既存のものであれば更新、なければ新規追加
辞書名.updateValue(値, forKey: キー) |
要素の個数を調べる
・個数を返す
辞書名.count |
・空かどうかを返す
辞書名.isEmpty |
要素の削除
・キーを指定して削除
辞書名.removeValue(forKey: キー) |
辞書名[キー] = nil |