मान लें कि आप दो सरणियों की तुलना करना चाहते हैं, तत्व दर तत्व ताकि आप अंतर ढूंढ सकें।
या हो सकता है कि आप प्रत्येक अनुक्रमणिका पर सबसे बड़ी संख्या खोजना चाहते हों, या आप हैश बनाने के लिए केवल कुंजियों की सूची और मानों की सूची को मर्ज करना चाहते हैं…
...ऐसा करने का "कठिन तरीका" कुछ इस तरह दिखाई देगा।
उदाहरण :
a = [1,2,3,4,5] b = [1,2,3,6,8] c = a.map.with_index { |_, idx| [a[idx], b[idx]] } # [[1, 1], [2, 2], [3, 3], [4, 6], [5, 8]]
इससे काम हो जाता है, लेकिन यह सुंदर नहीं है, है ना?
इसके अलावा, क्या हो रहा है यह समझने के लिए आपको एक मिनट के लिए रुकना और सोचना भी होगा।
यहाँ वह जगह है जहाँ Array#zip (एन्यूमरेबल#zip भी) चलन में आता है!
उदाहरण :
a = [1,2,3,4,5] b = [1,2,3,6,8] c = a.zip(b) # [[1, 1], [2, 2], [3, 3], [4, 6], [5, 8]]
आह! …बहुत बेहतर।
क्या आप सहमत नहीं हैं?
अगर हम zip
. से परिचित हैं हम तुरंत समझ जाएंगे कि क्या हो रहा है। और अगर हम नहीं करते हैं, तो दस्तावेज़ीकरण (या इससे भी बेहतर, यह लेख!) का एक त्वरित पठन इसकी व्याख्या करेगा।
zip
using का उपयोग करने का एक और लाभ यह है कि हम इसे अन्य संख्यात्मक तरीकों से आसानी से श्रृंखलाबद्ध कर सकते हैं।
उदाहरण के लिए, गणना विधि की तरह :
a = [1,2,3,4,5] b = [1,2,3,6,8] c = a.zip(b).count { |a,b| a == b } # 3
यह कोड इस बात की गिनती देता है कि कितने तत्व समान हैं और एक ही स्थिति में हैं।
एक और तरकीब जिसका आप उपयोग कर सकते हैं, जैसा कि मैंने पहले उल्लेख किया है, हैश बनाने के लिए कुंजियों और मूल्यों की सूची को मर्ज करना है।
उदाहरण :
a = %w(bacon coconut walnuts) b = [100, 200, 300] a.zip(b).to_h # {"bacon"=>100, "coconut"=>200, "walnuts"=>300}
एक और उदाहरण चाहते हैं?
ठीक है!
यह रहा :
letters = Array('a'..'z') shift = 3 translation_map = letters.zip(letters.rotate(shift)).to_h "hello".chars.map { |ch| translation_map[ch] }.join
यह सीज़र सिफर एल्गोरिथम का एक फैंसी कार्यान्वयन है।
सारांश
आपने Array#zip
. के बारे में सीखा विधि, जो आपको दो सरणियों को "मर्ज" करने की अनुमति देती है और उसके साथ कुछ अच्छी चालें करती है 🙂
अगर आपको यह पोस्ट अच्छी लगी हो तो इसे शेयर करना न भूलें आपके पसंदीदा सोशल नेटवर्क पर ताकि और लोग इसे पढ़ सकें!