sorted(by:)
Часть раздела Логика и управление потоком путешествия по Swift на Coddy. Урок 30 из 56.
Вы использовали .sorted() для массивов значений Comparable, таких как числа или строки. Если вы хотите выполнить сортировку по другому критерию, передайте замыкание, которое принимает два элемента и возвращает true, если первый элемент должен стоять перед вторым.
let words = ["banana", "hi", "hello"]
let byLength = words.sorted { $0.count < $1.count }
print(byLength) // ["hi", "hello", "banana"]Для сортировки по убыванию измените условие сравнения:
let down = words.sorted { $0.count > $1.count }
print(down) // ["banana", "hello", "hi"]Замыкание может сравнивать любое производное значение, длину, последнюю букву или запись в хеше. То, что сравнивает замыкание, определяет порядок сортировки.
min(by:) и max(by:) работают так же, но возвращают один опциональный элемент, а не отсортированную копию.
Задание
СреднеПрочитайте одну строку ввода: список пар name:age, разделенных запятыми.
Выведите три строки:
- Имена, отсортированные по возрасту по возрастанию, объединенные через
,. При совпадении возраста сортируйте имена по алфавиту. - Имя самого старого человека (используйте
max(by:)). При совпадении выигрывает тот, кто встретился первым. - Имя самого молодого человека (используйте
min(by:)). При совпадении выигрывает тот, кто встретился первым.
Для входных данных alice:30,bob:22,cara:30,dan:18 вывод будет следующим:
dan,bob,alice,cara
alice
danПопробуйте сами
let people = readLine()!.components(separatedBy: ",").map { pair -> (String, Int) in
let parts = pair.components(separatedBy: ":")
return (parts[0], Int(parts[1])!)
}
// TODO: сортировать по возрасту по возрастанию (при совпадении — по имени); max(by:) для самого старшего; min(by:) для самого младшего
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Логика и управление потоком
1Строки в деталях
Подсчет и индексыРегистр и удаление пробеловПоиск в строкахРазделение и объединениеЗамена подстрокИтоги — Проверка имени пользователя4Множества
Создание множествОбъединение и пересечениеРазность и симметрическая разностьПодмножество и надмножествоИтоги — Фильтр тегов7Проект — Трекер привычек
Обзор проектаОтметить выполнение10Проект — Движок викторины
Обзор проектаЗадаем вопросы2Диапазоны и шаги
Закрытые и полуоткрытыеШагМетоды диапазоновДиапазоны в SwitchИтоги: Сетка календаря3Словари
Объявление словарейБезопасный поискОбновление словарейИтерация по словарямГруппировка значенийИтоги — Инвентарь6Функции высшего порядка, часть 2
compactMapflatMapsorted(by:)Создание конвейеровПовторение — Таблица лидеровПотренируйтесь самостоятельно: Песочница Swift