using System.Collections.Generic;
using System.Linq;
namespace YourProject.Extensions
{
public static class ListExtensions
{
public static bool SetwiseEquivalentTo<T>(this List<T> list, List<T> other)
where T: IEquatable<T>
{
if (list.Except(other).Any())
return false;
if (other.Except(list).Any())
return false;
return true;
}
}
}
কখনও কখনও আপনার শুধুমাত্র জানতে হবে কিনা দুটি তালিকাগুলি পৃথক এবং এই পার্থক্যগুলি কী তা নয়। সেক্ষেত্রে আপনার প্রকল্পে এই এক্সটেনশন পদ্ধতিটি যুক্ত করার বিষয়টি বিবেচনা করুন। মনে রাখবেন যে আপনার তালিকাভুক্ত অবজেক্টগুলিকে আইকুয়েটেবল কার্যকর করা উচিত!
ব্যবহার:
public sealed class Car : IEquatable<Car>
{
public Price Price { get; }
public List<Component> Components { get; }
...
public override bool Equals(object obj)
=> obj is Car other && Equals(other);
public bool Equals(Car other)
=> Price == other.Price
&& Components.SetwiseEquivalentTo(other.Components);
public override int GetHashCode()
=> Components.Aggregate(
Price.GetHashCode(),
(code, next) => code ^ next.GetHashCode()); // Bitwise XOR
}
Component
শ্রেণি যাই হোক না কেন , এখানে দেখানো পদ্ধতিগুলি Car
প্রায় একইভাবে কার্যকর করা উচিত।
আমরা কীভাবে গেটহ্যাশকোড লিখেছি তা লক্ষ করা খুব গুরুত্বপূর্ণ। সঠিকভাবে বাস্তবায়নের লক্ষ্যে IEquatable
, Equals
এবং GetHashCode
উচিত একটি কথাটি সামঞ্জস্যপূর্ণ ভাবে উদাহরণস্বরূপ এর বৈশিষ্ট্য উপর কাজ করে।
একই বিষয়বস্তু সহ দুটি তালিকাগুলি এখনও বিভিন্ন অবজেক্ট এবং বিভিন্ন হ্যাশ কোড তৈরি করবে। যেহেতু আমরা চাই যে এই দুটি তালিকাগুলি সমান হিসাবে বিবেচিত হবে, তাই আমাদের অবশ্যই GetHashCode
তাদের প্রত্যেকটির জন্য একই মান তৈরি করতে দেওয়া উচিত । আমরা তালিকার প্রতিটি উপাদানকে হ্যাশকোড অর্পণ করে এবং সেগুলি একত্রিত করার জন্য স্ট্যান্ডার্ড বিটওয়াইজ এক্সওআর ব্যবহার করে এটি অর্জন করতে পারি। এক্সওআরটি অর্ডার-অজানাস্টিক, সুতরাং তালিকাগুলি আলাদাভাবে বাছাই করা হয়েছে কিনা তা বিবেচ্য নয়। এটি কেবল গুরুত্বপূর্ণ যে তাদের সমতুল্য সদস্য ব্যতীত অন্য কিছুই নেই।
দ্রষ্টব্য: অদ্ভুত নামটি এই সত্যটি বোঝায় যে পদ্ধতিটি তালিকার উপাদানগুলির ক্রম বিবেচনা করে না। আপনি যদি তালিকার উপাদানগুলির ক্রম সম্পর্কে যত্নশীল হন তবে এই পদ্ধতিটি আপনার জন্য নয়!