মান লেন আপনি দুটি অ্যারে তুলনা করতে চান, এলিমেন্ট বাই এলিমেন্ট যাতে আপনি পার্থক্যগুলো খুঁজে পান।
অথবা হয়তো আপনি প্রতিটি ইনডেক্সে সবচেয়ে বড় নাম্বার খুঁজতে চান, অথবা আপনি শুধু কী এবং ভ্যালুর একটি লিস্ট মার্জ করে একটি হ্যাশ বানাতে চান...
...এটি করার "কঠিন উপায়" এরকম কিছু দেখাবে।
উদাহরণ:
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 জানি তবে আমরা tứcখণা বুঝতে পারব কী হচ্ছে। এবং যদি না জানি, ডকুমেন্টেশন দ্রুত পড়া (অথবা আরও ভালো, এই আর্টিকেল!) এটিকে ব্যাখ্যা করবে।
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 মেথড সম্পর্কে শিখতে পেরেছেন, যা আপনাকে দুটি অ্যারে "মার্জ" করতে দেয় এবং সেটি দিয়ে কিছু কুল ট্রিক করা যায় 🙂
যদি আপনি এই পোস্টটি উপভোগ করেছেন তবে আপনার প্রিয় সোশ্যাল নেটওয়ার্কে শেয়ার করুন যাতে আরও মানুষ এটি পড়তে পারে!