Menu
Coddy logo textTech

Итерация по словарям

Часть раздела Логика и управление потоком путешествия по Swift на Coddy — урок 15 из 56.

Итерация по словарю с помощью 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)")
}

Выражение внутри sorted(by:) является замыканием: оно сравнивает две пары ($0 и $1) по их свойству key. Замыканиям будет посвящена отдельная глава позже, а пока воспринимайте это как готовый рецепт для сортировки словаря.

Еще два полезных свойства: .keys и .values возвращают коллекцию только ключей или только значений.

challenge icon

Задание

Легко

Словарь scores сопоставляет имена студентов с оценками типа Int. Выведите:

  1. Каждую запись в формате <name>: <score>, отсортированную по имени в алфавитном порядке, по одной на строку
  2. Sum: <total> для всех значений (используйте .values и reduce)
  3. Above 70: <count>, где count — это количество записей, оценка которых строго больше 70

Для словаря по умолчанию вывод будет следующим:

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: вывести отсортированные записи; просуммировать через reduce по .values; количество > 70
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Логика и управление потоком