Caution

お使いのブラウザはJavaScriptが実行できない状態になっております。
当サイトはWebプログラミングの情報サイトの為、
JavaScriptが実行できない環境では正しいコンテンツが提供出来ません。
JavaScriptが実行可能な状態でご閲覧頂くようお願い申し上げます。

Swift辞典

  1. トップページ
  2. Swift辞典
  3. 辞書.updateValue() / 辞書の削除 / mapValues()

辞書.updateValue() / 辞書の削除 / mapValues()

Swiftの辞書(Dictionary)は、要素の更新・削除・変換を行うメソッドを提供しています。『updateValue(_:forKey:)』は更新前の値を返すため、変更を検知できます。

メソッド一覧
メソッド概要
updateValue(_:forKey:)指定したキーの値を更新し、更新前の値を Optional で返します。
removeValue(forKey:)指定したキーのペアを削除し、削除された値を Optional で返します。
辞書[key] = nil指定したキーのペアを削除します(removeValue の簡略記法)。
removeAll()辞書の全要素を削除します。
mapValues(_:)全ての値を変換して新しい辞書を返します。
filter(_:)条件に一致するペアのみの辞書を返します。
merge(_:uniquingKeysWith:)別の辞書をマージします。
サンプルコード
var scores: [String: Int] = ["Alice": 80, "Bob": 70, "Carol": 90]

// updateValue: 更新前の値を返す
if let oldValue = scores.updateValue(85, forKey: "Bob") {
    print("Bob のスコアを \(oldValue) から \(scores["Bob"]!)  に更新しました")
}

// 新規キーの場合は nil を返す
let result = scores.updateValue(75, forKey: "Dave")
print("Dave は新規追加: \(result == nil)")

// removeValue: 削除した値を返す
if let removed = scores.removeValue(forKey: "Carol") {
    print("Carol(\(removed)点)を削除しました")
}

// 添字で nil を代入して削除
scores["Dave"] = nil
print("削除後: \(scores)")

// mapValues: 全ての値を変換
var doubled = scores.mapValues { $0 * 2 }
print("2倍: \(doubled)")

// filter: 条件に一致するペアのみ残す
let highScores = scores.filter { $0.value >= 80 }
print("80点以上: \(highScores)")

// merge: 辞書をマージ(重複キーは後の値で上書き)
var extra: [String: Int] = ["Eve": 95, "Alice": 88]
scores.merge(extra) { _, new in new }
print("マージ後: \(scores)")
概要

『updateValue(_:forKey:)』は値の更新と同時に、キーが存在したかどうかを確認できます。既存のキーへの更新では更新前の値を Optional で返し、新規キーへの追加では nil を返します。

『mapValues(_:)』はキーをそのまま保ちながら全ての値を変換します。元の辞書は変更されず、新しい辞書を返します。『merge(_:uniquingKeysWith:)』のクロージャでは「元の値」「新しい値」の2引数を受け取り、どちらの値を採用するか返します。

辞書の基本については辞書の基本 / 辞書.keys / 辞書.valuesを参照してください。

記事の間違いや著作権の侵害等ございましたらお手数ですがまでご連絡頂ければ幸いです。