連載
» 2015年07月23日 05時00分 公開

初心者のためのSwiftで始めるプログラミング入門(5):Swiftで値の集まりを使いこなそう――配列(Array)、辞書(Dictionary)の作り方、使い方 (2/2)

[諏訪悠紀,アンダースコア]
前のページへ 1|2       

辞書とは

 辞書は、複数の値に名前を付けて管理する集まりです。プログラム上では「Dictionary(ディクショナリ)」と呼びます。

 値の出し入れは、その名の通り辞書を引くように行います。キーワードを元に値を取り出したり、入れたりすることができます。

辞書のイメージ

 なお、このようなキーワードのことを、プログラミングの世界では「キー」と呼びます。

辞書を作る

 辞書を作成してみましょう。次のプログラムを書いてみてください。

let 価格表 = ["帽子":1000, "ベルト":500, "指輪":2000]
辞書の作成

 このプログラムでは「価格表」という定数を宣言し、その定数に辞書を代入しています。辞書を作るには、「[」と「]」の間にキーと値のペアを「,」で区切って書いていきます。キーと値のペアは「キー:値」といったように「:」でつなげます。よって、このプログラムでは「帽子」が「1000」、「ベルト」が「500」、「指輪」が「2000」という3つのペアを1つの辞書にまとめています。

辞書を作成するプログラムのイメージ

 キーの型、値の型は全てのペアで同じでなければいけません。上記のプログラムでは、キーがString型、値がInt型にしています。よって、この辞書は「キーがString型で値がInt型の辞書」となっています。ここでも配列と同様に型推論が働いているため、型の指定が不要になっています。

キーがString型で値がInt型の辞書のイメージ

辞書に入っている値を取り出す

 次に、辞書に入っている値を取り出してみましょう。次のプログラムを書いてみてください。

let 価格 = 価格表["帽子"]
println("こちらの商品は\(価格)円です")
辞書に入っている値の取り出し

 配列に入っている値を取り出す方法では番号を指定していましたが、辞書ではキーを指定します。「["帽子"]」としているので「価格表」に入っている「"帽子:1000"」のペアが該当します。よって「1000」が取り出されます。

辞書に入っている値の取り出しの結果

 結果を確認してみると、「価格」が「Optional(1000)」となっています。さて、これはどういうことでしょう?

 辞書から値を取り出すとき、指定したキーに該当するペアが辞書の中に入っておらず、値が取り出せない可能性があります。そのような「値がないかもしれない」場合を配慮して、辞書から値を取り出すときは「オプショナル(Optional)」という機能が働きます。そのため「価格」の結果は「Optional(1000)」となっています。

 オプショナルが一体どういうものなのか、もう少し後の回で解説する予定です。ここでは「値がない可能性が配慮されているんだな」と思ってもらう程度で十分です。

辞書に入っている値を1つずつ取り出す

 辞書でも、for文を使った値の取り出しが行えます。しかし、配列とは違い順番通りにきれいに並んではいません。

 次のプログラムを書いてみましょう。

for (商品, 価格) in 価格表 {
   println("\(商品)は\(価格)円です")
}
辞書を使ったfor文

 for文に辞書を使うには、「for」の後に取り出したキーと値に付ける変数名、「in」の後に配列の定数名(または変数名)を書きます。キーと値の変数名は「(キー, 値)」といったように「(」と「)」で囲い、間に「,」を入れます。

 このプログラムでは「価格表」に入っているペアを1組ずつ取り出しつつ、「{」と「}」の間に書かれている処理を繰り返し実行します。繰り返すごとにペアが1組ずつ取り出され、キーワードが「商品」に、値が「価格」に入ってきます。

辞書を使ったfor文のイメージ

 for文で繰り返し処理した結果を確認してみましょう。辞書に入っている値は3つなので3回繰り返され、毎回「商品」と「価格」の値が変わっていることが確認できます。

辞書を使ったfor文の結果

辞書に入っている値を入れ替える、追加する

 配列と同様、辞書を変数として宣言している場合に限り、辞書に入っている値を入れ替えたり、追加したり、削除したりすることができます。

 それぞれ、順番にプログラムを書いてみましょう。まずは辞書に入っている値を入れ替えてみましょう。

var 売上表 = ["スニーカー":10, "サンダル":4, "ブーツ":1]
売上表["スニーカー"] = 11
println("今日の売り上げは\(売上表)")

 辞書に入っている値を取り出すときと同じように、辞書の変数名の後に続けて、入れ替える対象を「["スニーカー"]」といったように書きます。その後に続けて新しく入れる値を「=」でつなげます。

 上記のプログラムでは、一行目で「売上表」に3つのペアを入れています。次の二行目で「スニーカー」を指定しているので、「スニーカー」とペアの値が「11」に入れ替えられています。よって、「買い物カゴ」の中身は「"スニーカー:11"」と「"サンダル:4"」と「"ブーツ:1"」になります。

辞書に入っている値の入れ替えの結果

 なお、キーの型や値の型が異なる場合はエラーになるので注意するようにしましょう。

型が異なる値の入れ替えの結果

 配列とは異なり、辞書では新しいキーを指定することでペアを追加できます。次のプログラムを書いてみましょう。

売上表["長ぐつ"] = 1
println("今日の売り上げは\(売上表)")

 このプログラムでは「"長ぐつ"」の値を変更しようとしています。「"長ぐつ"」はもともと「売上表」には入っていないので、新しいペアとして「"長ぐつ":1」が追加されます。

辞書への新しいペアの追加

 なお、辞書を定数で宣言している場合は値を入れ替えることができない点に注意してください。辞書に入っている値を後から入れ替えたい場合は必ず変数で宣言するようにしましょう。

定数の辞書に入っている値の入れ替え

辞書に入っている値を削除するremoveValueForKey

 辞書に入っている値を削除するには、「removeValueForKey」という機能を使います。この機能を使うと、指定したキーに該当するペアを削除できます。

 先ほど、「売上表」の中身を4つに増やしました。今度はその中からペアを1つだけ減らしてみましょう。次のプログラムを書いてみてください。

売上表.removeValueForKey("ブーツ")
println("今日の売り上げは\(売上表)")
配列に入っている値の削除

 「removeValueForKey」には「"ブーツ"」を指定しているので、該当するペア「"ブーツ:1"」が削除されます。結果、「売上表」の中身は3つになりました。

配列に入っている値の削除の結果

空の辞書を作る

 辞書でも配列と同様に、中身が空の状態で作成することもできます。空の辞書を作成するには次のように書きます。

var ノート: [Int: String] = [:]
空の辞書の作成

 このプログラムでは、「Int型のキー、String型の値を入れるための辞書」として「[Int: String]」を指定しています。このように、辞書に型を指定する場合は「[キーの型名: 値の型名]」と書きます。空の辞書は「[:]」と書きます。つまり、このプログラムでは「中身が空のInt型のキー、String型の値を入れるための辞書」を作っています。

 こうして作成した空の辞書には、後からペアを追加できます。

次回は「関数」について

 今回は配列や辞書といった「集まり」の作り方、使い方について解説しました。

 アプリ開発では数え切れないほど多くの値を取り扱います。そのような値がそのままバラバラに散らばっていたとしたら、必要な値を見つけることが困難になってしまったり、一括で処理させるのが大変になってしまったりしてしまいます。

 そういったときに配列や辞書が活躍します。複数の値をまとめて「集まり」とすることで、簡単に、分かりやすく、効率的に管理できます。部屋の掃除と同じように、プログラムにも整理が必要ということですね。

 次回は「関数」について解説する予定です。お楽しみに!

著者紹介

諏訪悠紀

アンダースコア株式会社でiOS/Androidのアプリ開発に携わっています。


ブログGoogle Play StoreiTunes App Store


前のページへ 1|2       

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。