ঠিক আছে, সুতরাং আমার একটি সংখ্যা আছে এবং এ থেকে স্বতন্ত্র মান পেতে ইচ্ছুক।
ব্যবহার করে System.Linq
, অবশ্যই একটি এক্সটেনশন পদ্ধতি বলা হয় Distinct
। সাধারণ ক্ষেত্রে এটি কোনও পরামিতি ছাড়াই ব্যবহার করা যেতে পারে, যেমন:
var distinctValues = myStringList.Distinct();
ভাল এবং ভাল, তবে আমার কাছে যদি পরিমাণে সামঞ্জস্যতা উল্লেখ করার প্রয়োজন হয় তবে আমি কেবলমাত্র ওভারলোডটি উপলভ্য:
var distinctValues = myCustomerList.Distinct(someEqualityComparer);
সমতা তুলনামূলক যুক্তি একটি উদাহরণ হতে হবে IEqualityComparer<T>
। আমি এটি অবশ্যই করতে পারি, তবে এটি কিছুটা ভার্জোজ এবং ভাল, ক্লডজি।
আমি যা প্রত্যাশা করব তা হ'ল একটি ওভারলোড যা ল্যাম্বডা নেবে, একটি ফানক <টি, টি, বুল> বলুন:
var distinctValues
= myCustomerList.Distinct((c1, c2) => c1.CustomerId == c2.CustomerId);
যে কেউ এরকম কিছু এক্সটেনশন উপস্থিত আছে, বা কিছু সমতুল্য কাজ আছে কিনা জানেন? নাকি আমি কিছু মিস করছি?
বিকল্পভাবে, কোনও আইকোয়ালিটি কম্পিউটারের ইনলাইন (আমাকে বিব্রত করবেন) নির্দিষ্ট করার কোনও উপায় আছে কি?
হালনাগাদ
আমি এই বিষয়ে একটি এমএসডিএন ফোরামের একটি পোস্টে অ্যান্ডারস হেজলসবার্গের একটি উত্তর পেয়েছি । তিনি বলেন:
আপনি যে সমস্যার সমাধান করতে যাচ্ছেন তা হ'ল দুটি বস্তু সমান তুলনা করলে তাদের অবশ্যই একই গেটহ্যাশকোড রিটার্ন মান থাকতে হবে (অন্যথায় ডিস্টিনেক্টের অভ্যন্তরীণভাবে ব্যবহৃত হ্যাশ টেবিলটি সঠিকভাবে কাজ করবে না)। আমরা আইকোয়ালিটি কম্পিউটার ব্যবহার করি কারণ এটি ইক্যুয়াল এবং গেটহ্যাশকোডের সামঞ্জস্যপূর্ণ বাস্তবায়নকে একক ইন্টারফেসে প্যাকেজ করে।
আমি মনে করি এটি উপলব্ধি করে ..