Menu
Coddy logo textTech

辞書の反復処理

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

for を使って辞書を反復処理すると、各ペアの両方の要素がタプルとして渡されます:

let prices = ["apple": 1, "bread": 3, "milk": 4]
for (item, price) in prices {
    print("\(item) costs \(price)")
}

反復の順序は保証されません。ループを2回実行すると、エントリが異なる順序で表示されることがあります。順序が重要な場合は、まずソートを行います:

for (item, price) in prices.sorted(by: { $0.key < $1.key }) {
    print("\(item): \(price)")
}

sorted(by:) 内の式はクロージャです。これは2つのペア($0$1)をそれぞれの key プロパティで比較します。クロージャについては後の章で詳しく説明しますが、今はこれを辞書をソートするためのレシピとして扱ってください。

さらに2つの便利なプロパティ:.keys.values を使用すると、キーのみ、または値のみのコレクションを取得できます。

challenge icon

チャレンジ

簡単

scores ディクショナリは、生徒の名前を Int 型のスコアにマッピングします。以下を出力してください:

  1. 各エントリを <name>: <score> の形式で、名前のアルファベット順にソートして、1行に1つずつ出力します
  2. 全スコアの合計を Sum: <total> として出力します(.valuesreduce を使用してください)
  3. スコアが 70 より大きいエントリの数を Above 70: <count> として出力します

デフォルトのディクショナリの場合、出力は以下のようになります:

Alice: 85
Bob: 60
Cara: 90
Dan: 72
Sum: 307
Above 70: 3

チートシート

for を使用して辞書を反復処理し、キーと値のタプルを取得します:

let prices = ["apple": 1, "bread": 3, "milk": 4]
for (item, price) in prices {
    print("\(item) costs \(price)")
}

反復の順序は保証されません。順序が重要な場合は、まずソートしてください:

for (item, price) in prices.sorted(by: { $0.key < $1.key }) {
    print("\(item): \(price)")
}

.keys.values を使用して、キーまたは値のみにアクセスします:

prices.keys    // キーのコレクション
prices.values  // 値のコレクション

自分で試してみよう

let scores: [String: Int] = [
    "Alice": 85, "Bob": 60, "Cara": 90, "Dan": 72
]

// TODO: ソートされたエントリを出力; .values に対して reduce で合計を算出; 70 を超えるものをカウント
quiz icon腕試し

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

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