সেখানে ছিল না, নেই এবং নাও হতে পারে, অন্তত আমি এটি বিশ্বাস করব। সংগ্রহ সমতার পিছনে কারণ সম্ভবত কোনও ব্যবহারকারী সংজ্ঞায়িত আচরণ।
সংগ্রহের উপাদানগুলি কোনও নির্দিষ্ট ক্রমে থাকার কথা নয় যদিও তাদের স্বাভাবিকভাবেই অর্ডার রয়েছে তবে এটি তুলনা করা অ্যালগরিদমের উপর নির্ভর করা উচিত নয়। বলুন যে আপনার দুটি সংগ্রহ রয়েছে:
{1, 2, 3, 4}
{4, 3, 2, 1}
তারা সমান না কি? আপনার অবশ্যই জানা উচিত তবে আপনার দৃষ্টিভঙ্গি কী তা আমি জানি না।
সংগ্রহগুলি ডিফল্টরূপে ধারণাগতভাবে অর্ডারড হয়, যতক্ষণ না অ্যালগোরিদমগুলি বাছাইয়ের নিয়ম সরবরাহ করে। এসকিউএল সার্ভারটি আপনার নজরে এনে দেবে একই জিনিসটি যখন আপনি পৃষ্ঠাগুলি করার চেষ্টা করছেন, আপনার প্রয়োজন অনুসারে বাছাইয়ের নিয়মগুলি:
https://docs.microsoft.com/en-US/sql/t-sql/queries/select-order-by-clause-transact-sql?view=sql-server-2017
আরও দুটি সংগ্রহ:
{1, 2, 3, 4}
{1, 1, 1, 2, 2, 3, 4}
আবার, তারা কি সমান বা না? তুমি আমাকে বলো ..
কোনও সংকলনের উপাদান পুনরাবৃত্তিযোগ্যতা বিভিন্ন পরিস্থিতিতে তার ভূমিকা পালন করে এবং কিছু সংকলন Dictionary<TKey, TValue>
এমনকি পুনরাবৃত্ত উপাদানগুলিকে মঞ্জুরি দেয় না।
আমি বিশ্বাস করি যে এই ধরণের সাম্যতা হ'ল অ্যাপ্লিকেশন সংজ্ঞায়িত এবং ফলে কাঠামোগুলি সম্ভাব্য বাস্তবায়নগুলির সমস্ত সরবরাহ করে না।
ভাল, সাধারণ ক্ষেত্রে Enumerable.SequenceEqual
যথেষ্ট ভাল তবে এটি নিম্নলিখিত ক্ষেত্রে মিথ্যা ফিরিয়ে দেয়:
var a = new Dictionary<String, int> { { "2", 2 }, { "1", 1 }, };
var b = new Dictionary<String, int> { { "1", 1 }, { "2", 2 }, };
Debug.Print("{0}", a.SequenceEqual(b)); // false
আমি এই জাতীয় প্রশ্নের কিছু উত্তর পড়েছি (আপনি তাদের জন্য গুগল করতে পারেন ) এবং আমি কী ব্যবহার করব তা সাধারণভাবে:
public static class CollectionExtensions {
public static bool Represents<T>(this IEnumerable<T> first, IEnumerable<T> second) {
if(object.ReferenceEquals(first, second)) {
return true;
}
if(first is IOrderedEnumerable<T> && second is IOrderedEnumerable<T>) {
return Enumerable.SequenceEqual(first, second);
}
if(first is ICollection<T> && second is ICollection<T>) {
if(first.Count()!=second.Count()) {
return false;
}
}
first=first.OrderBy(x => x.GetHashCode());
second=second.OrderBy(x => x.GetHashCode());
return CollectionExtensions.Represents(first, second);
}
}
এর অর্থ একটি আসল মূল ক্রমটিকে বিবেচনায় না নিয়ে বারবার বার সহ তাদের উপাদানগুলিতে অন্যটির প্রতিনিধিত্ব করে। বাস্তবায়নের কয়েকটি নোট:
GetHashCode()
সাম্যের জন্য নয় কেবল আদেশের জন্য; আমি মনে করি এটি এক্ষেত্রে যথেষ্ট
Count()
প্রকৃতপক্ষে সংগ্রহটি গণনা করবে না এবং সরাসরি সম্পত্তি প্রয়োগের মধ্যে পড়বে ICollection<T>.Count
যদি রেফারেন্সগুলি সমান হয় তবে এটি কেবল বরিস
IList
? প্রশ্ন অস্পষ্ট।