2013-06-13 10 views
8

Mam jedną wielką wątpliwość, kiedy zacząłem programować Scalę. Chcę wiedzieć, jak działa metoda map w scala. Czy przetwarza sekwencyjnie, czy wielowątkowo? I co ważniejsze, chciałbym wiedzieć, że dlaczego map metoda jest szybsza niż while lub foreach?Różnica między metodą mapy i foreach w Scali?

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

Skąd wiesz 'map' jest szybszy niż' foreach'? – Jatin

+4

Tak naprawdę w rzeczywistości "foreach" powinno być szybsze niż 'map', ponieważ wewnętrznie' map' buduje 'list' w powyższym przypadku, gdy' foreach' nie jest budowany. Dowolny skrypt pokazuje, że 'foreach' jest szybszy – Jatin

+0

Cóż, testowałem z kodem i które wyniki dla wyrażeń (np. Map) są szybsze w scala w porównaniu do foreach lub w czasie itp. –

Odpowiedz

17

Po pierwsze, dwie operacje są nieskończenie różne. map jest transformacja z listy podanej funkcji A => B, natomiast foreach daje Unit i jest zwykle używany do niepożądanych skutków ubocznych.

Domyślam się, że foreach jest "szybszy" pod względem cykli wymaganych do wykonania w porównaniu z map, który tworzy nową kolekcję (w tym przypadku) w wyniku działania funkcji. Ale porównanie tych dwóch naprawdę porównuje jabłka i pomarańcze.

map będzie tylko wtedy, gdy zbiór równoległych, na których jest ona wywoływana jest zbiorem równoległe. Więc w przykładzie:

list.map(x => x) 

nie jest równoległa i jest sekwencyjna, ale

list.par.map(x => x) 

byłyby równoległe. Istnieją oczywiście różne zastrzeżenia, które należy wziąć pod uwagę przy takim użytkowaniu. Ta sama kolekcja równoległa ma również metodę foreach.

+0

Dzięki gpampara :-) –

+0

Prosty, krótki i precyzyjny. Niesamowite.. :) –

Powiązane problemy