Skip to content

পোস্ট

কালেকশন কম্প্যারার, দুটি কালেকশনের মধ্যে পার্থক্য খুঁজে বের করা

২২ জুলাই, ২০১৯ • 2 মিনিট পড়া

কালেকশন কম্প্যারার, দুটি কালেকশনের মধ্যে পার্থক্য খুঁজে বের করা

আপনাকে কি দুটি কালেকশন তুলনা করতে হয়েছে এবং আইটেমটি সোর্স কালেকশনে আছে, তুলনাকারী কালেকশনে আছে নাকি উভয়ে আছে তার উপর ভিত্তি করে কিছু লজিক চালাতে হয়েছে? হ্যাঁ, আমারও হয়েছে, আমার UI এবং ডেটাবেস থেকে ডেটা মার্জ করার প্রয়োজন ছিল। আমি কোনো ভালো সমাধান খুঁজে পাইনি, তাই আমি একটি কালেকশন কম্প্যারার লিখেছি।

এটি কীভাবে কাজ করে তা বোঝানোর জন্য একটি উদাহরণ দেখি।

সোর্স ডেটায় আমাদের কাছে ১, ৩, ৪, ৬ মানগুলো আছে, এবং
তুলনাকারী কালেকশনে আমাদের কাছে ১, ২, ৩, ৪, ৫ মানগুলো আছে।

তুলনাকারী কালেকশনের সাথে তুলনা করলে সোর্স ডেটায় ২ এবং ৫ নেই, এবং সোর্স কালেকশনের সাথে তুলনা করলে তুলনাকারী কালেকশনে ৬ নেই।

এই মার্জের মধ্য দিয়ে চলুন:

১. উভয়ে আছে (আপডেট) ২. শুধুমাত্র তুলনাকারী কালেকশনে আছে (সোর্সে যোগ করুন) ৩. উভয়ে আছে (আপডেট) ৪. উভয়ে আছে (আপডেট) ৫. শুধুমাত্র তুলনাকারী কালেকশনে আছে (সোর্সে যোগ করুন) ৬. শুধুমাত্র সোর্স কালেকশনে আছে (সোর্স থেকে সরান)

কোডটি এরকম দেখায়:

var source = new []{1, 3, 4, 6};
var collection = new[] {1, 2, 3, 4, 5};

source.CompareTo(collection, (s, d) => s == d)
    .OnlyInSourceCollection(s=> {/* do something */})
    .OnlyInComparingCollection(s=>{/* do something */})
    .InBoth(s=> {/*do something*/})
    .Process();

কেন LINQ ব্যবহার করবেন না?

আপনি LINQ ব্যবহার করতে পারেন, তবে LINQ কালেকশনগুলো কমপক্ষে ৩ বার ইটারেট করবে যার মধ্যে ডেটার উপর অপারেশন (যোগ, আপডেট এবং মুছে ফেলা) অন্তর্ভুক্ত নেই। CollectionComparer ব্যবহার করে, ডেটা শুধুমাত্র দুইবার ইটারেট হয়।

বাইনারি সার্চের মতো পার্থক্য খুঁজে বের করার দ্রুততর উপায় আছে, কিন্তু বাইনারি সার্চ শুধুমাত্র ইন্টিজারের সাথে কাজ করে। কালেকশন কম্প্যারার যেকোনো ধরনের তুলনা সাপোর্ট করে। তুলনা এই কোড দিয়ে সংজ্ঞায়িত করা হয়: (s, d) => s == d

সোর্স কোড GitHub এ পাওয়া যাবে।

লেখক: চাক কনওয়ে সফটওয়্যার ইঞ্জিনিয়ারিং এবং জেনারেটিভ এআই-তে বিশেষজ্ঞ। তার সাথে সোশ্যাল মিডিয়ায় যোগাযোগ করুন: X (@chuckconway) অথবা তাকে YouTube-এ দেখুন।

↑ উপরে ফিরে যান

আপনি এগুলোও পছন্দ করতে পারেন