2013-06-13 35 views
8

Tôi có một nghi ngờ lớn khi tôi bắt đầu lập trình Scala. Tôi muốn biết phương pháp map trong các công trình scala như thế nào. Cho dù đó là xử lý tuần tự hoặc đa luồng? Và quan trọng hơn, tôi muốn biết rằng tại sao phương pháp map nhanh hơn while hoặc foreach?Sự khác biệt giữa bản đồ và phương pháp nghiên cứu ở Scala?

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

Làm cách nào để bạn biết 'bản đồ' nhanh hơn' foreach'? – Jatin

+4

Trên thực tế, 'foreach' nên nhanh hơn' map' vì 'map' nội bộ xây dựng một' danh sách' trong trường hợp trên, khi 'foreach' không xây dựng. Bất kỳ kịch bản nào cũng cho thấy 'foreach' nhanh hơn – Jatin

+0

Tôi đã thử nghiệm với mã và kết quả cho biểu thức (tức là bản đồ) nhanh hơn trong scala so với foreach hoặc trong khi, v.v. –

Trả lời

17

Thứ nhất, hai thao tác là vô cùng khác nhau. map là một biến đổi của danh sách được đưa ra một hàm A => B, trong khi foreach sản lượng Unit và thường được sử dụng cho các tác dụng phụ.

Tôi đoán rằng foreach là "nhanh hơn" về chu kỳ cần thiết để thực thi so với map tạo bộ sưu tập mới (trong trường hợp này) là kết quả của hàm. Nhưng so sánh hai điều này thực sự là so sánh táo và cam.

map sẽ chỉ song song nếu bộ sưu tập mà trên đó nó được gọi là bộ sưu tập song song. Vì vậy, trong ví dụ của bạn:

list.map(x => x) 

không được song song và là tuần tự, nhưng

list.par.map(x => x) 

sẽ là song song. Rõ ràng là có nhiều cảnh báo khác nhau cần được tính đến với cách sử dụng này. Cùng một bộ sưu tập song song cũng có phương thức foreach.

+0

Cảm ơn gpampara :-) –

+0

Đơn giản, ngắn gọn và chính xác. Tuyệt vời.. :) –

Các vấn đề liên quan