Возможный дубликат:
Сравнение двух коллекций для равенства
Мне нужно проверить, имеют ли два IEnumerable<T>
списки одинаковые элементы, не обязательно в том же порядке.
Я нацелен на .NET 3.5.
Вот тесты. Вопрос в том, как реализовать HasSameElements()
?
var l1 = new[]{1,2,3};
var l2 = new[]{3,1,2};
bool rez1 = l1.HasSameElements(l2);//should be true
var l3 = new[]{1,2,3,2};
var l4 = new[]{3,1,2,2};
bool rez2 = l3.HasSameElements(l4);//should be true
var l5 = new[]{1,2,3,2};
var l6 = new[]{1,2,3};
bool rez3 = l5.HasSameElements(l6);//should be false
Дополнительные примечания:
-
В примерах я использую IEnumerable, но T может быть чем угодно. Должен ли T обязательно реализовать
IComparable
? -
Enumerable.SequenceEquals() сам по себе не работает, он ожидает того же порядка для элементов.
-
Здесь шаблон для
HasElements
:
[только какой-то текст-заполнитель в качестве обходного пути для отформатирования кода Markdown]
public static class Extensions {
public static bool HasElements(this IEnumerable<T> l1, IEnumerable<T> l2){
throw new NotImplementedException();
}
}