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