मान लीजिए कि आप दो सरणियों की तुलना करना चाहते हैं, तत्व दर तत्व ताकि आप अंतर ढूंढ सकें।
या शायद आप हर इंडेक्स पर सबसे बड़ी संख्या ढूंढना चाहते हैं, या आप केवल कुंजियों की सूची और मानों की सूची को मर्ज करके एक हैश बनाना चाहते हैं…
…इसे करने का "कठिन तरीका" ऐसा कुछ दिखेगा।
उदाहरण:
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 (और Enumerable#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 का उपयोग करने का एक और लाभ यह है कि हम इसे अन्य Enumerable मेथड्स के साथ आसानी से चेन कर सकते हैं।
उदाहरण के लिए, count मेथड की तरह:
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 मेथड के बारे में सीखा, जो आपको दो सरणियों को "मर्ज" करने और उसके साथ कुछ अच्छे ट्रिक्स करने की अनुमति देता है 🙂
यदि आपको यह पोस्ट पसंद आया तो इसे अपने पसंदीदा सोशल नेटवर्क पर शेयर करना न भूलें ताकि अधिक लोग इसे पढ़ सकें!