2013-06-13 27 views
8

जब मैंने स्कैला प्रोग्रामिंग शुरू की तो मुझे एक बड़ा संदेह है। मैं जानना चाहता हूं कि स्केल कार्यों में map विधि कैसे है। चाहे यह अनुक्रमिक रूप से या बहुप्रचारित प्रसंस्करण हो रहा है? और सबसे महत्वपूर्ण बात यह जानना चाहूंगा कि map विधि while या foreach से तेज क्यों है?स्कैला में मानचित्र और foreach विधि के बीच अंतर?

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

आप कैसे जानते हैं कि 'मानचित्र' 'foreach 'से तेज़ है? – Jatin

+4

असल में वास्तव में, 'foreach' 'map' से तेज़ होना चाहिए क्योंकि आंतरिक रूप से' मानचित्र 'उपर्युक्त मामले में' सूची 'बनाता है जहां' foreach' नहीं बनता है। कोई भी स्क्रिप्ट 'foreach' को तेजी से – Jatin

+0

दिखाती है, ठीक है, मैंने कोड के साथ परीक्षण किया है और फोरैच या इत्यादि की तुलना में स्केल में कौन सा परिणाम (यानी नक्शा) अभिव्यक्ति तेज है। –

उत्तर

17

सबसे पहले, दोनों ऑपरेशन असीम रूप से अलग हैं। map एक फ़ंक्शन A => B दिए गए सूची का एक परिवर्तन है, जबकि foreachUnit उत्पन्न करता है और आमतौर पर दुष्प्रभावों के लिए उपयोग किया जाता है।

मुझे लगता है कि होता है कि foreach "तेजी" पर अमल करने की जरूरत चक्र के मामले में map जो एक नया संग्रह बनाता है (इस मामले में) समारोह के परिणाम के रूप में की तुलना में है। लेकिन इन दोनों की तुलना वास्तव में सेब और संतरे की तुलना कर रही है।

map केवल समानांतर होगा यदि संग्रह जिस पर इसे बुलाया जाता है वह समानांतर संग्रह है। अपने उदाहरण में तो:

list.map(x => x) 

समानांतर है नहीं और अनुक्रमिक है, लेकिन

list.par.map(x => x) 

समानांतर होगा। स्पष्ट रूप से विभिन्न चेतावनी हैं जिन्हें इस उपयोग के साथ ध्यान में रखना आवश्यक है। समान समांतर संग्रह में foreach विधि भी है।

+0

धन्यवाद gpampara :-) –

+0

सरल, छोटा और सटीक। बहुत बढ़िया.. :) –

संबंधित मुद्दे