辞書は、複数の値に名前を付けて管理する集まりです。プログラム上では「Dictionary(ディクショナリ)」と呼びます。
値の出し入れは、その名の通り辞書を引くように行います。キーワードを元に値を取り出したり、入れたりすることができます。
なお、このようなキーワードのことを、プログラミングの世界では「キー」と呼びます。
辞書を作成してみましょう。次のプログラムを書いてみてください。
let 価格表 = ["帽子":1000, "ベルト":500, "指輪":2000]
このプログラムでは「価格表」という定数を宣言し、その定数に辞書を代入しています。辞書を作るには、「[」と「]」の間にキーと値のペアを「,」で区切って書いていきます。キーと値のペアは「キー:値」といったように「:」でつなげます。よって、このプログラムでは「帽子」が「1000」、「ベルト」が「500」、「指輪」が「2000」という3つのペアを1つの辞書にまとめています。
キーの型、値の型は全てのペアで同じでなければいけません。上記のプログラムでは、キーがString型、値がInt型にしています。よって、この辞書は「キーがString型で値がInt型の辞書」となっています。ここでも配列と同様に型推論が働いているため、型の指定が不要になっています。
次に、辞書に入っている値を取り出してみましょう。次のプログラムを書いてみてください。
let 価格 = 価格表["帽子"] println("こちらの商品は\(価格)円です")
配列に入っている値を取り出す方法では番号を指定していましたが、辞書ではキーを指定します。「["帽子"]」としているので「価格表」に入っている「"帽子:1000"」のペアが該当します。よって「1000」が取り出されます。
結果を確認してみると、「価格」が「Optional(1000)」となっています。さて、これはどういうことでしょう?
辞書から値を取り出すとき、指定したキーに該当するペアが辞書の中に入っておらず、値が取り出せない可能性があります。そのような「値がないかもしれない」場合を配慮して、辞書から値を取り出すときは「オプショナル(Optional)」という機能が働きます。そのため「価格」の結果は「Optional(1000)」となっています。
オプショナルが一体どういうものなのか、もう少し後の回で解説する予定です。ここでは「値がない可能性が配慮されているんだな」と思ってもらう程度で十分です。
辞書でも、for文を使った値の取り出しが行えます。しかし、配列とは違い順番通りにきれいに並んではいません。
次のプログラムを書いてみましょう。
for (商品, 価格) in 価格表 { println("\(商品)は\(価格)円です") }
for文に辞書を使うには、「for」の後に取り出したキーと値に付ける変数名、「in」の後に配列の定数名(または変数名)を書きます。キーと値の変数名は「(キー, 値)」といったように「(」と「)」で囲い、間に「,」を入れます。
このプログラムでは「価格表」に入っているペアを1組ずつ取り出しつつ、「{」と「}」の間に書かれている処理を繰り返し実行します。繰り返すごとにペアが1組ずつ取り出され、キーワードが「商品」に、値が「価格」に入ってきます。
for文で繰り返し処理した結果を確認してみましょう。辞書に入っている値は3つなので3回繰り返され、毎回「商品」と「価格」の値が変わっていることが確認できます。
配列と同様、辞書を変数として宣言している場合に限り、辞書に入っている値を入れ替えたり、追加したり、削除したりすることができます。
それぞれ、順番にプログラムを書いてみましょう。まずは辞書に入っている値を入れ替えてみましょう。
var 売上表 = ["スニーカー":10, "サンダル":4, "ブーツ":1] 売上表["スニーカー"] = 11 println("今日の売り上げは\(売上表)")
辞書に入っている値を取り出すときと同じように、辞書の変数名の後に続けて、入れ替える対象を「["スニーカー"]」といったように書きます。その後に続けて新しく入れる値を「=」でつなげます。
上記のプログラムでは、一行目で「売上表」に3つのペアを入れています。次の二行目で「スニーカー」を指定しているので、「スニーカー」とペアの値が「11」に入れ替えられています。よって、「買い物カゴ」の中身は「"スニーカー:11"」と「"サンダル:4"」と「"ブーツ:1"」になります。
なお、キーの型や値の型が異なる場合はエラーになるので注意するようにしましょう。
配列とは異なり、辞書では新しいキーを指定することでペアを追加できます。次のプログラムを書いてみましょう。
売上表["長ぐつ"] = 1 println("今日の売り上げは\(売上表)")
このプログラムでは「"長ぐつ"」の値を変更しようとしています。「"長ぐつ"」はもともと「売上表」には入っていないので、新しいペアとして「"長ぐつ":1」が追加されます。
なお、辞書を定数で宣言している場合は値を入れ替えることができない点に注意してください。辞書に入っている値を後から入れ替えたい場合は必ず変数で宣言するようにしましょう。
辞書に入っている値を削除するには、「removeValueForKey」という機能を使います。この機能を使うと、指定したキーに該当するペアを削除できます。
先ほど、「売上表」の中身を4つに増やしました。今度はその中からペアを1つだけ減らしてみましょう。次のプログラムを書いてみてください。
売上表.removeValueForKey("ブーツ") println("今日の売り上げは\(売上表)")
「removeValueForKey」には「"ブーツ"」を指定しているので、該当するペア「"ブーツ:1"」が削除されます。結果、「売上表」の中身は3つになりました。
辞書でも配列と同様に、中身が空の状態で作成することもできます。空の辞書を作成するには次のように書きます。
var ノート: [Int: String] = [:]
このプログラムでは、「Int型のキー、String型の値を入れるための辞書」として「[Int: String]」を指定しています。このように、辞書に型を指定する場合は「[キーの型名: 値の型名]」と書きます。空の辞書は「[:]」と書きます。つまり、このプログラムでは「中身が空のInt型のキー、String型の値を入れるための辞書」を作っています。
こうして作成した空の辞書には、後からペアを追加できます。
今回は配列や辞書といった「集まり」の作り方、使い方について解説しました。
アプリ開発では数え切れないほど多くの値を取り扱います。そのような値がそのままバラバラに散らばっていたとしたら、必要な値を見つけることが困難になってしまったり、一括で処理させるのが大変になってしまったりしてしまいます。
そういったときに配列や辞書が活躍します。複数の値をまとめて「集まり」とすることで、簡単に、分かりやすく、効率的に管理できます。部屋の掃除と同じように、プログラムにも整理が必要ということですね。
次回は「関数」について解説する予定です。お楽しみに!
Copyright © ITmedia, Inc. All Rights Reserved.