Выбор ответа 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 000 000 раз
- 1 раз
- 0 раз: lazy ничего не вычисляет
- 6 разправильный ответ
Разбор
lazy превращает цепочку в ленивую: элементы вычисляются по требованию. first(where:) перебирает, пока не найдёт подходящий: 2, 4, 6, 8, 10 не подходят, 12 подходит, итого 6 вызовов map. Без lazy map сначала построил бы массив из миллиона элементов. Ноль вызовов было бы, если бы результат вообще не запрашивали.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Предыдущий вопрос
Задача на Swift: два товара на заданную сумму
Следующий вопрос
Какую коллекцию Swift выбрать
Ещё по теме «Коллекции и строки»
- Сложность append у Array в Swift
- ContiguousArray и мост с NSArray
- Подсчёт частот в словаре
- Порядок ключей в Dictionary
- Сложность операций коллекций Swift
- String и NSString: длина и индексы
- Как взять n-й символ строки в Swift
- Сколько символов в строке с флагом