SwiftのDictionary更新・削除・存在チェックを完全解説!初心者でも使えるupdateValueとremoveValueの使い方
生徒
「SwiftのDictionaryで、あとから値を変えたり消したりする方法ってありますか?」
先生
「はい、Dictionary(連想配列)ではupdateValueやremoveValueを使うことで、値の更新や削除ができますよ。」
生徒
「どうやって使えばいいか、簡単な例で教えてもらえますか?」
先生
「もちろんです!初心者の方でもわかりやすいように、一緒に見ていきましょう。」
1. Dictionaryとは?簡単におさらい
SwiftのDictionary(ディクショナリ)は、「キー」と「値」のペアでデータを管理するコレクション型です。名前と年齢のセットや、商品コードと価格など、対応関係があるデータの管理に最適です。
2. updateValueメソッドで値を更新する
すでにあるキーの値を変更したいときはupdateValue(_:forKey:)メソッドを使います。新しい値を指定して、対応するキーの値を上書きできます。
var scores = ["国語": 80, "数学": 90, "英語": 70]
let oldValue = scores.updateValue(95, forKey: "数学")
print(scores)
print("前の値: \(oldValue ?? 0)")
["国語": 80, "数学": 95, "英語": 70]
前の値: 90
updateValueは、変更前の値を戻り値として返してくれるのが特徴です。もしそのキーが存在しなければnilが返ってきます。
3. キーが存在しない場合は新しく追加される
updateValueは、新しいキーに対しても使用できます。その場合、自動的にDictionaryに追加されます。
scores.updateValue(85, forKey: "理科")
print(scores)
["国語": 80, "数学": 95, "英語": 70, "理科": 85]
このようにupdateValueは、更新と追加の両方に使える便利なメソッドです。
4. removeValueメソッドで値を削除する
Dictionaryから特定のキーとその値を削除したい場合には、removeValue(forKey:)を使います。
let removed = scores.removeValue(forKey: "英語")
print(scores)
print("削除された値: \(removed ?? 0)")
["国語": 80, "数学": 95, "理科": 85]
削除された値: 70
こちらも削除された値を戻り値で返してくれるので、ログを取ったりチェックするのに便利です。
5. removeValueと代入による削除の違い
Dictionaryでは、nilを代入することでもキーと値を削除できます。removeValueとの違いは、戻り値がない点です。
scores["国語"] = nil
print(scores)
["数学": 95, "理科": 85]
nil代入の方が簡潔ですが、削除された値を取得できないため、ログや条件チェックにはremoveValueの方が向いています。
6. キーが存在するか確認するには?
あるキーがDictionaryに存在するかをチェックしたいときは、if letやcontainsを使います。
if let math = scores["数学"] {
print("数学のスコアは \(math) 点です")
} else {
print("数学のデータはありません")
}
数学のスコアは 95 点です
if letは、Optional(値があるかもしれない型)を安全に取り扱う書き方です。
7. contains(where:)でキーの存在を確認する方法
少し応用ですが、contains(where:)を使えば、条件に合うキーや値の存在チェックも可能です。
let hasMath = scores.keys.contains("数学")
print("数学のデータがあるか?: \(hasMath)")
数学のデータがあるか?: true
keys.contains()を使えば、特定のキーが存在するかをBool(true/false)で取得できます。
8. 実用サンプル:商品と在庫数を管理する
Dictionaryを使って商品名と在庫数を管理し、追加・更新・削除・確認を行う簡単なプログラムを紹介します。
var stock: [String: Int] = [
"りんご": 5,
"バナナ": 3,
"みかん": 8
]
// 商品を追加
stock.updateValue(10, forKey: "ぶどう")
// 商品の在庫を更新
stock.updateValue(6, forKey: "バナナ")
// 商品の削除
stock.removeValue(forKey: "みかん")
// 商品が存在するかチェック
if let count = stock["りんご"] {
print("りんごはあと \(count) 個あります")
}
りんごはあと 5 個あります
このように、updateValueとremoveValueを活用することで、在庫管理や出席確認、設定値の変更など、さまざまな場面に応用できます。