Lazy collections and evaluation
Another very interesting place where we could perform work lazily is collections and sequences. We store many elements in them, and sometimes, performing an operation such as filter
or map
would take a lot of time and may be unnecessary.
Before we dig into the details, let's first check out a small example to see why working lazily with a collection is so useful. We have a collection. We want to perform an operation such as mapping on it, and get one or a few elements from the result. Here is how we would implement it using an array:
let numbers = Array(1...1_000_000) let doubledNumbers = numbers.map { $0 * 2 } doubledNumbers.last
When we call the map
method on the numbers
array, it applies it to every element in the array and returns the new mapped array. As a result, we get a new doubledNumbers
array. Our map { $0 * 2 }
closure is called as many times as there are elements in the array; in our case, it is 1,000,000 times. But we need only the last element...