Я хотел бы сравнить две коллекции (на 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#), но дать ответ на любой язык, который вы хотите, это не имеет значения.
Примечание: Я использовал целые числа в примерах для простоты, но я хочу, чтобы иметь возможность использовать ссылки типа объекты тоже (они не ведут себя правильно, как ключи, так как только ссылка на объект сравнивается, а не содержание).
Это почти то, что я хочу. Тем не менее, я хотел бы иметь возможность сделать это, даже если я не использую целые числа. Я бы хотел использовать ссылочные объекты, но они не ведут себя правильно, как ключи в словарях. – mbillard 2008-09-08 19:09:16
Моно, ваш вопрос спорный, если ваши товары не сопоставимы. Если они не могут использоваться в качестве ключей в словаре, доступ к решению отсутствует. – skolima 2008-09-16 15:50:04
Я думаю, что Моно означал, что ключи не сортируются. Но решение Даниэля явно предназначено для реализации с хэш-таблицей, а не с деревом, и будет работать до тех пор, пока есть тест эквивалентности и хеш-функция. – erickson 2008-10-01 15:29:40