Выбор ответа Middle Коллекции и строки обновлено

Ленивые последовательности lazy

Вопрос

Сколько раз вызовется замыкание в map в коде let x = (1...1_000_000).lazy.map { $0 * 2 }.first { $0 > 10 }?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: 6 раз. lazy превращает цепочку в ленивую: элементы вычисляются по требованию. first(where:) перебирает, пока не найдёт подходящий: 2, 4, 6, 8, 10 не подходят, 12 подходит, итого 6 вызовов map.

Варианты ответа

  1. 1 000 000 раз
  2. 1 раз
  3. 0 раз: lazy ничего не вычисляет
  4. 6 разправильный ответ

Разбор

lazy превращает цепочку в ленивую: элементы вычисляются по требованию. first(where:) перебирает, пока не найдёт подходящий: 2, 4, 6, 8, 10 не подходят, 12 подходит, итого 6 вызовов map. Без lazy map сначала построил бы массив из миллиона элементов. Ноль вызовов было бы, если бы результат вообще не запрашивали.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.