আমি দুটি সংগ্রহের তুলনা করতে চাই (সি # তে), তবে এটিকে দক্ষতার সাথে কার্যকর করার সর্বোত্তম উপায় সম্পর্কে আমি নিশ্চিত নই।
আমি এনুম্যুয়েবল.সিকোয়েন্সএকুয়াল সম্পর্কে অন্যান্য থ্রেডটি পড়েছি , তবে এটি ঠিক যা খুঁজছি তা নয়।
আমার ক্ষেত্রে, দুটি সংগ্রহ সমান হবে যদি সেগুলির মধ্যে উভয়ই একই আইটেম থাকে (অর্ডার বিবেচনা না করে)।
উদাহরণ:
collection1 = {1, 2, 3, 4};
collection2 = {2, 4, 1, 3};
collection1 == collection2; // true
আমি সাধারণত যা করি তা হ'ল একটি সংগ্রহের প্রতিটি আইটেম লুপ করা এবং এটি অন্য সংগ্রহে উপস্থিত রয়েছে কিনা তা দেখুন, তবে অন্য সংগ্রহের প্রতিটি আইটেমের মধ্য দিয়ে লুপ করুন এবং দেখুন যে এটি প্রথম সংকলনে বিদ্যমান রয়েছে কিনা। (আমি দৈর্ঘ্যের তুলনা করে শুরু করি)।
if (collection1.Count != collection2.Count)
return false; // the collections are not equal
foreach (Item item in collection1)
{
if (!collection2.Contains(item))
return false; // the collections are not equal
}
foreach (Item item in collection2)
{
if (!collection1.Contains(item))
return false; // the collections are not equal
}
return true; // the collections are equal
তবে এটি পুরোপুরি সঠিক নয় এবং এটি সম্ভবত সমতার জন্য দুটি সংগ্রহের তুলনা করার সবচেয়ে কার্যকর উপায় নয়।
এটির জন্য ভুল হতে পারে এমন একটি উদাহরণ হ'ল:
collection1 = {1, 2, 3, 3, 4}
collection2 = {1, 2, 2, 3, 4}
যা আমার বাস্তবায়নের সাথে সমান হবে। প্রতিটি আইটেমের সন্ধানের পরিমাণটি কি কেবল গণনা করা উচিত এবং উভয় সংকলনে গণনা সমান কিনা তা নিশ্চিত করা উচিত?
উদাহরণগুলি কিছুটা সি # তে রয়েছে (আসুন একে সিউডো-সি # বলুন) তবে আপনি যে ভাষায় ইচ্ছুক উত্তর দিন, তাতে কিছু যায় আসে না।
দ্রষ্টব্য: আমি সরলতার জন্য উদাহরণগুলিতে পূর্ণসংখ্যার ব্যবহার করেছি, তবে আমি রেফারেন্স-টাইপ অবজেক্টগুলিও ব্যবহার করতে সক্ষম হতে চাই (তারা কী হিসাবে সঠিকভাবে আচরণ করে না কারণ কেবলমাত্র বস্তুর রেফারেন্স তুলনা করা হয়, সামগ্রী নয়)।