Это ленивый compactMap:
for i in ([1, 2, nil].lazy.compactMap{$0}) {
print(i)
}
Это создает LazyMapSequence
в O (1).
.lazy
является общим решением этой проблемы, делая приложение O (1) и избегая промежуточного распределения, за счет удорожания нескольких итераций.
Вполне возможно, что название этого вопроса смущает некоторых читателей, хотя вопрос довольно ясен. Чтобы быть в явном виде: на самом деле итерации по результату все равно будет O (n), так же как итерации по результату .reverse()
является O (n), даже если вызов .reverse()
является O (1).