कोई अंतर नहीं है, वास्तव mapमें सी के रूप में कार्यान्वित किया जाता है rb_ary_collectऔर enum_collect(जैसे। mapएक सरणी पर और किसी भी अन्य एनम के बीच अंतर है, लेकिन बीच कोई अंतर नहीं है mapऔर collect)।
दोनों क्यों mapऔर collectरूबी में मौजूद हैं? mapसमारोह विभिन्न भाषाओं में कई नामकरण सम्मेलनों है। विकिपीडिया एक सिंहावलोकन प्रदान करता है :
मानचित्र फ़ंक्शन का आरंभ कार्यात्मक प्रोग्रामिंग भाषाओं में हुआ है, लेकिन आज भी समर्थित है (या परिभाषित किया जा सकता है) कई प्रक्रियात्मक, वस्तु उन्मुख, और बहु-प्रतिमान भाषाओं में भी: C ++ की स्टैंडर्ड टेम्प्लेट लाइब्रेरी में, इसे transformC # (3.0 अंक) में कहा जाता है । LINQ लाइब्रेरी, इसे विस्तार विधि के रूप में प्रदान किया जाता है Select। नक्शा उच्च स्तरीय भाषाओं जैसे कि पर्ल, पायथन और रूबी में अक्सर उपयोग किया जाने वाला ऑपरेशन है; ऑपरेशन को mapइन तीनों भाषाओं में कहा जाता है। रूबी (स्मालटाक से) [जोर मेरा] में मानचित्र के लिए एक collectउपनाम भी प्रदान किया गया है । कॉमन लिस्प, नक्शे जैसे कार्यों का एक परिवार प्रदान करता है; यहां वर्णित व्यवहार के अनुरूप एक को mapcar(कार संचालन का उपयोग करके संकेत का संकेत मिलता है) कहा जाता है ।
रूबी घर पर और अधिक महसूस करने के लिए स्मॉलटॉक दुनिया के प्रोग्रामर के लिए एक उपनाम प्रदान करती है।
ऐरे और एनम के लिए एक अलग कार्यान्वयन क्यों है? एनम एक सामान्यीकृत पुनरावृत्ति संरचना है, जिसका अर्थ है कि कोई रास्ता नहीं है जिसमें रूबी भविष्यवाणी कर सकती है कि अगला तत्व क्या हो सकता है (आप अनंत एनमों को परिभाषित कर सकते हैं, एक उदाहरण के लिए प्राइम देखें )। इसलिए प्रत्येक क्रमिक तत्व को प्राप्त करने के लिए एक फ़ंक्शन को कॉल करना चाहिए (आमतौर पर यह eachविधि होगी )।
Arrays सबसे आम संग्रह है, इसलिए उनके प्रदर्शन का अनुकूलन करना उचित है। चूंकि रूबी बहुत कुछ जानती है कि एरे कैसे काम करता है, इसके लिए उसे कॉल करने की ज़रूरत नहीं है, eachलेकिन केवल सरल पॉइंटर हेरफेर का उपयोग कर सकता है जो कि काफी तेज है।
इसी तरह के अनुकूलन कई ऐरे तरीकों के लिए मौजूद हैं zipया जैसे count।
mapकोड गोल्फ में पसंद किया जाता है ।