रूबी में छंटनी के तरीके

छंटाई कंप्यूटर वैज्ञानिकों के लिए शुरू से ही एक पूर्वाग्रह था। वहाँ कई थे एल्गोरिदम वह आया और उपयोग से बाहर हो गया और आज भी नए एल्गोरिदम प्रदर्शन की सीमाओं को आगे बढ़ा रहे हैं। उच्च-स्तरीय भाषा होने के नाते, आप छँटाई एल्गोरिदम को लागू नहीं करेंगे माणिक अगर आपको प्रदर्शन के बारे में परवाह है, और इसके अलावा, छँटाई Arrays और अन्य संग्रह अभी और चीजें हैं जो रूबी आपके लिए करती हैं।

तकनीकी रूप से, छांटना एक काम है जोकि एन्युमरेबल मॉड्यूल द्वारा नियंत्रित किया जाता है। Enumerable मॉड्यूल रूबी में सभी प्रकार के संग्रह को एक साथ जोड़ता है। यह संग्रह से अधिक पुनरावृति करता है, छँटाई करता है, कुछ तत्वों के माध्यम से देखता है और पाता है, आदि। कैसे संग्रहणीय प्रकार एक संग्रह एक रहस्य का एक सा है, या कम से कम यह तो रहना चाहिए। वास्तविक छँटाई एल्गोरिथ्म अप्रासंगिक है, केवल एक चीज जिसे आपको जानना आवश्यक है, वह यह है कि संग्रह में वस्तुओं की तुलना "अंतरिक्ष यान ऑपरेटर" का उपयोग करके की जाती है।

"स्पेसशिप ऑपरेटर" दो ऑब्जेक्ट लेता है, उनकी तुलना करता है और फिर -1, 0 या 1 देता है। यह थोड़ा अस्पष्ट है, लेकिन ऑपरेटर के पास बहुत अच्छी तरह से परिभाषित व्यवहार नहीं है। उदाहरण के लिए न्यूमेरिक ऑब्जेक्ट लेते हैं। यदि आपके पास दो संख्यात्मक वस्तुएं हैं

instagram viewer
तथा , और मूल्यांकन ए <=> बी, क्या अभिव्यक्ति का मूल्यांकन करेगा? न्यूमेरिक्स के मामले में, यह बताना आसान है। यदि a, b से अधिक है, तो यह -1 होगा, यदि वे बराबर हैं तो यह 0 होगा और यदि b, a से अधिक है, तो यह 1 होगा। इसका उपयोग सॉर्टिंग एल्गोरिथ्म को बताने के लिए किया जाता है, जिसमें दो वस्तुओं में से एक को पहले में जाना चाहिए सरणी. बस याद रखें कि यदि बाएं हाथ का ऑपरेंड सरणी में पहले आना है, तो इसे -1 का मूल्यांकन करना चाहिए, यदि दाहिना हाथ पहले 1 होना चाहिए, और अगर यह मायने नहीं रखता है तो यह 0 होना चाहिए।

यह हमेशा इस तरह के नियम का पालन नहीं करता है। यदि आप इस ऑपरेटर का उपयोग विभिन्न प्रकार की दो वस्तुओं पर करते हैं तो क्या होगा? आपको शायद एक अपवाद मिलेगा। जब आप कॉल करते हैं तो क्या होता है 1 <=> 'बंदर'? यह कॉलिंग के बराबर होगा 1। <=> ( 'बंदर'), जिसका अर्थ है वास्तविक विधि पर बुलाया जा रहा है बाएं ऑपरेंड और Fixnum # <=> अगर दाहिने हाथ का ऑपरेंड कोई न्यूमेरिक नहीं है, तो रिटर्न देता है। यदि ऑपरेटर शून्य पर लौटता है, तो सॉर्ट विधि एक अपवाद उठाएगी। इसलिए, सरणियों को छांटने से पहले सुनिश्चित करें कि उनमें ऐसी वस्तुएँ हैं जिन्हें क्रमबद्ध किया जा सकता है।

दूसरा, स्पेसशिप ऑपरेटर के वास्तविक व्यवहार को परिभाषित नहीं किया गया है। यह केवल कुछ आधार वर्गों के लिए परिभाषित है, और आपके कस्टम वर्गों के लिए, यह पूरी तरह से आप पर निर्भर है कि आप उन्हें क्या मतलब देना चाहते हैं। अगर आपके पास एक है छात्र कक्षा में आपको अंतिम नाम, प्रथम नाम, ग्रेड स्तर या उस के संयोजन से छात्र क्रमबद्ध हो सकते हैं। इसलिए हमेशा इस बात से अवगत रहें कि स्पेसशिप ऑपरेटर के व्यवहार और छंटाई को किसी भी चीज़ के लिए अच्छी तरह से परिभाषित नहीं किया गया है लेकिन आधार प्रकार।

आपके पास संख्यात्मक वस्तुओं का एक सरणी है और आप उन्हें क्रमबद्ध करना चाहेंगे। ऐसा करने के लिए दो प्राथमिक विधियाँ हैं: तरह तथा तरह!. पहले सरणी की एक प्रति बनाता है, इसे सॉर्ट करता है और इसे वापस करता है। दूसरी जगह सरणी को सॉर्ट करता है।

यह बहुत आत्म व्याख्यात्मक है। तो चलो इसे एक पायदान ऊपर ले जाएं। क्या होगा यदि आप स्पेसशिप ऑपरेटर पर भरोसा नहीं करना चाहते हैं? यदि आप पूरी तरह से अलग व्यवहार चाहते हैं तो क्या होगा? ये दो छँटाई विधियाँ एक वैकल्पिक ब्लॉक पैरामीटर लेती हैं। यह ब्लॉक दो मापदंडों को लेता है और मानों को उपज देना चाहिए जैसे कि स्पेसशिप ऑपरेटर करता है: -1, 0 और 1। इसलिए, एक सरणी को देखते हुए, हम इसे सभी मूल्यों को क्रमबद्ध करना चाहते हैं जो कि 3 से विभाज्य हैं पहले आते हैं, और अन्य सभी बाद में आते हैं। वास्तविक आदेश यहाँ कोई फर्क नहीं पड़ता, बस 3 से विभाज्य पहले आओ।

यह कैसे काम करता है? पहले, ब्लॉक तर्क को सॉर्ट विधि पर ध्यान दें। दूसरा, ब्लॉक मापदंडों पर किए गए मोडुलो डिवीजनों और स्पेसशिप ऑपरेटर के पुन: उपयोग पर ध्यान दें। यदि कोई 3 का गुणक है, तो मोडुलो 0 होगा, अन्यथा, यह 1 या 2 होगा। चूँकि 0 1 या 2 से पहले छँटेगा, केवल यहाँ modulo मायने रखता है। ब्लॉक पैरामीटर का उपयोग उन सरणियों में विशेष रूप से उपयोगी होता है जिनमें एक से अधिक प्रकार के तत्व होते हैं, या जब आप कस्टम वर्ग पर सॉर्ट करना चाहते हैं, जिसमें परिभाषित स्पेसशिप ऑपरेटर नहीं होता है।

एक और सॉर्ट विधि है, कहा जाता है इसके अनुसार क्रमबद्ध करें. हालाँकि, आपको पहले sort_by से निपटने से पहले मैप के साथ सरणियों और संग्रहों का अनुवाद करना समझना चाहिए।

instagram story viewer