Методы диапазонов
Часть раздела Логика и управление потоком путешествия по Swift на Coddy — урок 9 из 56.
Диапазоны — это полноценные Collection, поэтому они обладают тем же набором инструментов, который вы используете для массивов.
contains, count, first и last — все они работают напрямую:
let r = 1...10
print(r.contains(5)) // true
print(r.count) // 10
print(r.first!, r.last!) // 1 10Большинство методов массивов, которые вы использовали, также работают. filter возвращает массив, потому что результат фильтрации диапазона сам по себе не является диапазоном:
let evens = (1...10).filter { $0 % 2 == 0 }
print(evens) // [2, 4, 6, 8, 10]То же самое и с reduce: у диапазонов он есть, и вы будете использовать его для быстрого вычисления сумм и произведений.
Задание
ЛегкоПрочитайте два целых числа (две строки): n и target. Рассматривайте закрытый диапазон 1...n как ваш набор данных.
Выведите три строки:
true, еслиtargetнаходится в диапазоне, иначеfalse- Произведение всех значений в диапазоне (
n!: факториал). Используйтеreduce. - Значения в диапазоне, которые являются кратными
3, объединенные через,(или пустая строка, если таких нет). Используйтеfilter.
Для входных данных 5 / 3 вывод будет следующим:
true
120
3Шпаргалка
Диапазоны соответствуют протоколу Collection и поддерживают стандартные методы коллекций:
let r = 1...10
r.contains(5) // true
r.count // 10
r.first! // 1
r.last! // 10filter для диапазона возвращает массив:
let evens = (1...10).filter { $0 % 2 == 0 }
// [2, 4, 6, 8, 10]reduce работает напрямую с диапазонами:
let product = (1...5).reduce(1) { $0 * $1 } // 120
let sum = (1...5).reduce(0, +) // 15Попробуйте сами
let n = Int(readLine()!)!
let target = Int(readLine()!)!
let r = 1...n
// TODO: contains(target), произведение через reduce, кратные 3 через filter
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Логика и управление потоком
1Строки в деталях
Подсчет и индексыРегистр и удаление пробеловПоиск в строкахРазделение и объединениеЗамена подстрокИтоги — Проверка имени пользователя4Множества
Создание множествОбъединение и пересечениеРазность и симметрическая разностьПодмножество и надмножествоИтоги — Фильтр тегов7Проект — Трекер привычек
Обзор проектаОтметить выполнение10Проект — Движок викторины
Обзор проектаЗадаем вопросы2Диапазоны и шаги
Закрытые и полуоткрытыеШагМетоды диапазоновДиапазоны в SwitchИтоги: Сетка календаря