Я хотів би порівняти дві колекції (в C #), але я не впевнений у найкращому способі ефективної реалізації цього.
Я прочитав іншу тему про Enumerable.SequenceEqual , але це не зовсім те, що я шукаю.
У моєму випадку дві колекції були б рівними, якби вони містять однакові предмети (незалежно від порядку).
Приклад:
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}
Що було б рівним моєму виконанню. Чи варто просто порахувати кількість знайдених предметів і переконатися, що кількість рахунків однакова в обох колекціях?
Приклади є в якомусь C # (назвемо це псевдо-C #), але давати свою відповідь будь-якою мовою ви хочете, це не має значення.
Примітка. Я використовував цілі числа в прикладах для простоти, але хочу також використовувати об'єкти опорного типу (вони не ведуть себе правильно як ключі, оскільки порівнюються лише посилання на об'єкт, а не вміст).