Итерация по словарям
Часть раздела Логика и управление потоком путешествия по 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 возвращают коллекцию только ключей или только значений.
Задание
ЛегкоСловарь scores сопоставляет имена студентов с оценками типа Int. Выведите:
- Каждую запись в формате
<name>: <score>, отсортированную по имени в алфавитном порядке, по одной на строку Sum: <total>для всех значений (используйте.valuesиreduce)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
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Логика и управление потоком
1Строки в деталях
Подсчет и индексыРегистр и удаление пробеловПоиск в строкахРазделение и объединениеЗамена подстрокИтоги — Проверка имени пользователя4Множества
Создание множествОбъединение и пересечениеРазность и симметрическая разностьПодмножество и надмножествоИтоги — Фильтр тегов7Проект — Трекер привычек
Обзор проектаОтметить выполнение10Проект — Движок викторины
Обзор проектаЗадаем вопросы2Диапазоны и шаги
Закрытые и полуоткрытыеШагМетоды диапазоновДиапазоны в SwitchИтоги: Сетка календаря3Словари
Объявление словарейБезопасный поискОбновление словарейИтерация по словарямГруппировка значенийИтоги — Инвентарь6Функции высшего порядка, часть 2
compactMapflatMapsorted(by:)Создание конвейеровПовторение — Таблица лидеров