2013-06-13 15 views
8

Ho un grosso dubbio quando ho iniziato a programmare Scala. Voglio sapere come funziona il metodo map in scala. Che si tratti di elaborazione sequenziale o in multithreading? E, ancora più importante, vorrei sapere perché il metodo map è più veloce di while o foreach?Differenza tra la mappa e il metodo foreach in Scala?

val list = List(1,2,3,45,12) 
list.map(x => x) 
list.foreach(x => println(x)) 
+4

Come fai a sapere che 'map' è più veloce di' foreach'? – Jatin

+4

In realtà, 'foreach' dovrebbe essere più veloce di' map' perché internamente 'map' costruisce un' elenco' nel caso precedente in cui 'foreach' non crea. Qualsiasi script mostra 'foreach' per essere più veloce – Jatin

+0

Beh, ho provato con il codice e quali risultati per (es. Mappa) le espressioni sono più veloci in scala rispetto a foreach o while, ecc. –

risposta

17

In primo luogo, le due operazioni sono infinitamente diverse. map è una trasformazione della lista data una funzione A => B, mentre produce Unit e viene solitamente utilizzata per effetti collaterali.

Direi che foreach è "più veloce" in termini di cicli necessari per l'esecuzione rispetto a map che crea una nuova raccolta (in questo caso) come risultato della funzione. Ma confrontare questi due è davvero il confronto tra mele e arance.

map sarà parallelo solo se la raccolta su cui è stato richiamato è una raccolta parallela. Quindi nel tuo esempio:

list.map(x => x) 

non è parallela ed è sequenziale, ma

list.par.map(x => x) 

sarebbe paralleli. Ci sono ovviamente diversi avvertimenti che devono essere presi in considerazione con questo utilizzo. La stessa raccolta parallela ha anche un metodo foreach.

+0

Grazie a gpampara :-) –

+0

Semplice, breve e preciso. Eccezionale.. :) –

Problemi correlati