Я хотел бы сравнить две коллекции (в С#), но я не уверен в том, как наилучшим образом реализовать это.
Я прочитал другую тему о 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}
Что будет с моей реализацией. Должен ли я просто подсчитывать количество раз, когда каждый элемент найден и убедиться, что подсчеты равны в обеих коллекциях?
Примеры в некотором роде С# (пусть называют его псевдо-С#), но дайте свой ответ на любом языке, который вам нужен, это не имеет значения.
Примечание: Я использовал целые числа в примерах для простоты, но я хочу также использовать объекты ссылочного типа (они не ведут себя корректно как ключи, потому что только ссылка объекта а не содержание).