Группировка значений
Часть раздела Логика и управление потоком путешествия по Swift на Coddy. Урок 16 из 56.
Шаблон с индексом по умолчанию лежит в основе двух повседневных форм.
Счётчик частоты: подсчитывает, сколько раз встречается каждый ключ.
let letters = ["a", "b", "a", "c", "a"]
var counts: [String: Int] = [:]
for letter in letters {
counts[letter, default: 0] += 1
}
// counts == ["a": 3, "b": 1, "c": 1]Группировка по категориям: собирайте значения по производному ключу:
let words = ["hi", "hello", "yo", "hey"]
var byLength: [Int: [String]] = [:]
for w in words {
byLength[w.count, default: []].append(w)
}
// [2: ["hi", "yo"], 5: ["hello"], 3: ["hey"]]Значением по умолчанию для случая группировки является пустой массив. Значение default: используется только при отсутствии ключа, после чего правая часть изменяет запись на месте.
Задание
СреднеПрочитайте одну строку ввода: список слов, разделённых запятыми.
Выведите в этом порядке:
- По одной строке для каждой длины слова, встречающейся во входных данных, отсортированных от shorter к большей, в формате
<length>: <count>, гдеcount— это количество слов такой длины Most common length: <n>, гдеn— длина с наибольшим количеством слов. При одинаковых значениях выбирайте shorter длину.
Для входных данных hi,hello,yo,hey,bonjour,bye результатом будет:
2: 2
3: 2
5: 1
7: 1
Most common length: 2(Длины 2 и 3 встречаются по два раза. При равенстве выбирается shorter длина, поэтому выигрывает 2.)
Попробуйте сами
let words = readLine()!.components(separatedBy: ",")
// TODO: подсчитать слова по длине; вывести отсортированные; вывести самые частые (при ничьей: более короткие)
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Логика и управление потоком
1Строки в деталях
Подсчет и индексыРегистр и удаление пробеловПоиск в строкахРазделение и объединениеЗамена подстрокИтоги — Проверка имени пользователя4Множества
Создание множествОбъединение и пересечениеРазность и симметрическая разностьПодмножество и надмножествоИтоги — Фильтр тегов7Проект — Трекер привычек
Обзор проектаОтметить выполнение10Проект — Движок викторины
Обзор проектаЗадаем вопросы2Диапазоны и шаги
Закрытые и полуоткрытыеШагМетоды диапазоновДиапазоны в SwitchИтоги: Сетка календаря3Словари
Объявление словарейБезопасный поискОбновление словарейИтерация по словарямГруппировка значенийИтоги — Инвентарь6Функции высшего порядка, часть 2
compactMapflatMapsorted(by:)Создание конвейеровПовторение — Таблица лидеровПотренируйтесь самостоятельно: Песочница Swift