#16 Swiftで学ぶ辞書型(マップ)の基本
Swiftで名前と値の組み合わせを扱うには、`Dictionary`という、そのままの名前の仕組みを使います。この記事では、Swiftにおける辞書の使い方と、オプショナル型との付き合い方を解説します。
辞書を作ってみる
var scores = ["太郎": 90, "次郎": 85]
型を明示したい場合は、`[String: Int]`のように書くこともできます。
var scores2: [String: Int] = ["太郎": 90, "次郎": 85]
値を取り出す
Swiftの辞書から値を取り出した結果は、キーが存在しない可能性を考慮して、オプショナル型になります。
if let score = scores["太郎"] {
print(score)
}
キーが存在しない場合にデフォルト値を使いたいなら、`??`演算子(nilの場合の既定値を指定する演算子)が便利です。
let score = scores["四郎"] ?? 0
値を追加・変更する
scores["三郎"] = 78
既に存在するキーに代入すると値が上書きされ、存在しないキーに代入すると新しい要素として追加されます。値を削除したい場合は、`nil`を代入するか、`removeValue(forKey:)`を使います。
scores["三郎"] = nil
scores.removeValue(forKey: "次郎")
全てのキーと値を順に処理する
for (name, score) in scores {
print("\(name): \(score)")
}
キーだけ、または値だけを扱いたい場合は`keys`・`values`プロパティが使えます。
for name in scores.keys {
print(name)
}
Swiftならではの注意点
辞書から取り出した値がオプショナル型になるのは、以前の記事で触れた「値がないかもしれない」ことを型で表現するSwiftの一貫した設計思想の表れです。`if let`で安全に取り出す習慣を、辞書でも同じように意識しましょう。また、Swiftの辞書はハッシュテーブルで実装されているため、要素の並び順は保証されません。順序を保ちたい場合は、配列を組み合わせて自前で管理する必要がある点も覚えておくとよいでしょう。
キーの存在だけを確認する
値そのものは不要で、キーがあるかどうかだけを知りたい場合は、`index(forKey:)`が`nil`かどうかで判定できます。ただし多くの場面では、値の取得と存在確認をまとめて行える`if let`の書き方の方がシンプルです。
まとめ
Swiftの辞書は`Dictionary`型で、取り出した値はオプショナル型として安全に扱います。`??`演算子での既定値指定、`removeValue`での削除、`keys`/`values`での一覧取得もあわせて覚えておきましょう。
本ページはプロモーションを含みます。
参考書籍(PR)
Swiftをもっと学びたい方には「これからつくる iPhoneアプリ開発入門」がおすすめです。
PR
コードを書かずに自動化したい方へ
「学んだけど自分の作業に組み込む時間がない」という方向けに、ダブルクリックで動く Windows専用の自動化ツールをオーダーメイドで作成しています。気になる方は こちらをご覧ください。
コメント
コメントを投稿