Come ha detto Martin R lazy()
, si evita la creazione di un array intermedio. Tuttavia, se si confronta il tempo di esecuzione della funzione su array di dimensioni diverse, si scopre che lazy()
è "solo" il 10% più veloce.
È interessante notare che lo lazy()
è per gli array con meno di 200 elementi fino a 2 volte più veloci e ottiene con più elementi quasi la stessa velocità della funzione senza la conversione (10% più veloce).
(Testato con Xcode 6.4 e Xcode 7 con funzioni globali e protocollo di estensione in un parco giochi come (compilato) file sorgente)
Così lazy()
preferirebbe essere utilizzati per Sequences
in cui non si sa se è finita . Poi, per i cicli sono probabilmente utilizzato con break
o return
:
for element in lazy(sequence).map{ ... } {
if element == 1000 {
break
}
// use element
}
Se si chiama mappa su una infinita Sequence
(come 1,2,3 ...) l'esecuzione sarebbe anche infinita. Con lazy()
la trasformazione e l'esecuzione vengono "ritardate" in modo da poter gestire sequenze "grandi" e infinite in modo più efficiente se si esce dal ciclo prima dell'ultimo elemento.
A proposito, 'flatMap (trasformazione: Generator.Element -> U?) -> [U] 'è ora disponibile nella libreria standard Swift 2 :) – jtbandes