Menu
Coddy logo textTech

Методы диапазонов

Часть раздела Логика и управление потоком путешествия по 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: у диапазонов он есть, и вы будете использовать его для быстрого вычисления сумм и произведений.

challenge icon

Задание

Легко

Прочитайте два целых числа (две строки): n и target. Рассматривайте закрытый диапазон 1...n как ваш набор данных.

Выведите три строки:

  1. true, если target находится в диапазоне, иначе false
  2. Произведение всех значений в диапазоне (n!: факториал). Используйте reduce.
  3. Значения в диапазоне, которые являются кратными 3, объединенные через , (или пустая строка, если таких нет). Используйте filter.

Для входных данных 5 / 3 вывод будет следующим:

true
120
3

Шпаргалка

Диапазоны соответствуют протоколу Collection и поддерживают стандартные методы коллекций:

let r = 1...10
r.contains(5)   // true
r.count         // 10
r.first!        // 1
r.last!         // 10

filter для диапазона возвращает массив:

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
quiz iconПроверьте себя

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

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