【Swift】ディクショナリ(辞書)の使い方。キーと値のペアを1つとしたデータの集まり。(Swift 2.1、XCode 7.2)

2020年6月16日

辞書を作る

ディクショナリ(辞書)とは、キーと値を1セットとした複数のデータを1つの変数で管理できる入れ物のことをいう。

「名前(キー)」は「山田(値)」、「年齢(キー)」は「32(値)」のように、キーを使って辞書から1つの値を得るイメージである。他の言語ではハッシュマップや連想配列などと呼ばれている。

辞書のイメージ

 

辞書は以下のコードのように[キー:値,キー:値,キー:値,キー:値, …]で作る。キーと値の型を指定しなければ、型を混在して格納することができる。

配列と同じように、var(変数)で宣言した辞書はコードの中で要素の変更ができ、let(定数)で宣言した辞書は要素を変更することはできない。

 

キーと値の型を指定した場合は辞書に格納する型を制限でき、指定した型以外のキーや値を格納しようとするとエラーが発生する。間違った使い方を防止するために、通常は型を指定して作ったほうがよさそうだ。

 

キーの型は制限し、値の型は自由にする場合は、以下のコードのようにAnyObjectを指定する。よく使うので覚えておこう。

 

空の辞書を作るには以下のコードのようにする。最初は空の辞書を作成し、処理の中で要素を追加する使い方ができる。

辞書の要素を取得する

辞書の要素を取得するには、以下のコードのように辞書名[“キー"]で取得する。取得した値はオプショナル型なので、処理の中で使う場合はアンラップする必要がある。(オプショナル型について詳しくは⇒「記事」)

 

配列や辞書などのコレクション型変数の要素を取得するときは、要素を1つずつ取り出しながらすべての要素を処理することが多い。その場合はfor-in文を用いて以下のコードのように取得する。

 

その他、辞書の情報を知るプロパティやメソッドには以下のようなものがある。

 

辞書の要素を操作する

辞書に要素を追加するには、以下のコードのようにする。指定したキーが辞書に登録されていなければ新規追加、すでに登録されていれば更新になる。

 

updateVallueメソッドは更新前の値が戻ってくるので、更新されたのか、新規追加されたのかを戻り値から判別することができる。

 

以下のコードのように、辞書に含まれる要素にアクセスするような書き方で追加することもできる。updateValueメソッドだとキーと値の書き順が逆になってて混乱するのでこの方が書きやすい。

 

辞書から要素を削除するには、以下のコードのようにする。updateVallueメソッドと同様に、削除前のデータが戻ってくるので、データが削除されたかどうかを判別することができる。

 

これに関しても、辞書に含まれる要素にアクセスするような書き方で削除できる。値にnilを設定すると辞書から要素が削除される。

 

ちなみに、以下のコードのように辞書の値をオプショナル型に指定して、値にnilを設定した場合は要素は削除されないのかと思いきや、通常どおり削除された。