Menu
Coddy logo textTech

辞書の更新

CoddyのSwiftジャーニー「ロジックとフロー」セクションの一部 — レッスン 14/56。

辞書への書き込みは、読み取りと同じ方法、つまりサブスクリプトを使用して行います。

var prices: [String: Int] = ["apple": 1]
prices["bread"] = 3                // キーを追加します
prices["apple"] = 2                // 既存のキーを更新します
prices["apple"] = nil              // キーを削除します

2つの名前付きメソッドを使用すると、同じことをより明示的に行うことができます:

prices.updateValue(5, forKey: "milk") // 古い値を返すか、nilを返します
prices.removeValue(forKey: "bread")  // 削除された値を返すか、nilを返します

名前付きメソッドは以前の値を返します。これは、キーが既に存在していたかどうかを知る必要がある場合に便利です。

前のレッスンのデフォルト値付きサブスクリプトのパターンは、ミューテーション(値の変更)と完璧に連鎖します。これにより、if文を書かずにカウンターを構築できます:

var counts: [String: Int] = [:]
for letter in ["a", "b", "a"] {
    counts[letter, default: 0] += 1
}
// counts == ["a": 2, "b": 1]
challenge icon

チャレンジ

中級

1行の入力を読み込みます。これは、初期状態が空の辞書に対する操作をカンマで区切ったリストです。各操作は以下のいずれかです:

  • set:<key>:<value> 追加または更新(値は整数)
  • add:<key>:<value> 既存の値に値を加算(default-subscriptパターンを使用)
  • del:<key> キーを削除

初期状態が空の [String: Int] に対してすべての操作を順番に適用した後、キーをアルファベット順に、1行に1つずつ、<key>=<value> の形式で出力してください。

入力が set:a:5,add:a:3,set:b:1,del:b,add:c:2 の場合、出力は以下のようになります:

a=8
c=2

チートシート

サブスクリプトまたは名前付きメソッドを使用して辞書を変更します:

prices["bread"] = 3      // 追加
prices["apple"] = 2      // 更新
prices["apple"] = nil    // 削除

prices.updateValue(5, forKey: "milk") // 古い値またはnilを返します
prices.removeValue(forKey: "bread")   // 削除された値またはnilを返します

ifを使わずに変更するには、デフォルトサブスクリプトパターンを使用します:

var counts: [String: Int] = [:]
for letter in ["a", "b", "a"] {
    counts[letter, default: 0] += 1
}
// counts == ["a": 2, "b": 1]

自分で試してみよう

let ops = readLine()!.components(separatedBy: ",")
var dict: [String: Int] = [:]

// TODO: 各操作をパースしてset/add/delを適用し、ソートされたキーと値を出力する
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

ロジックとフローのすべてのレッスン