C#: Сравните содержание двух IEnumerables

button('hey') вызывает функцию, а не устанавливает ее как обратный вызов.

36
задан Svish 10 March 2009 в 23:52
поделиться

5 ответов

Существует довольно много путей. Примите A, и B является IEnumerable.

!A.Except(B).Any() && !B.Except(A).Any()
A.Count() == B.Count() && A.Intersect(B).Count() == B.Count()
etc
38
ответ дан MZHm 7 July 2019 в 23:49
поделиться

Я думаю, приказывая, чтобы последовательность была самым быстрым способом, которым можно достигнуть этого.

1
ответ дан Mehrdad Afshari 7 July 2019 в 23:49
поделиться

Я сделал это для слияния новых объектов в набор без дубликатов, оно берет два набора и возвращает все объекты с любыми дубликатами

List<Campaign> nonMatching = (from n in newCampaigns 
where !(from e in Existing select e.Id).Contains<int>(n.Id) 
select n).ToList<Campaign>();

Теперь путем удаления! для содержит оператор

List<Campaign> nonMatching = (from n in newCampaigns 
where (from e in Existing select e.Id).Contains<int>(n.Id) 
select n).ToList<Campaign>();

, он возвратит дубликаты

1
ответ дан 2 revs 7 July 2019 в 23:49
поделиться

Если Вы действительно просто тестируете, чтобы видеть, существуют ли дубликаты, то предложение leppie должно работать:

if (A.Except(B).Count == 0 && B.Except(A).Count == 0) {...}

, Но если просто необходимо прибыть в IEnumerable без дубликатов:

var result = A.Union(B).Distinct();
0
ответ дан Daniel 7 July 2019 в 23:49
поделиться

Попробуйте класс HashSet:

var enumA = new[] { 1, 2, 3, 4 };
var enumB = new[] { 4, 3, 1, 2 };

var hashSet = new HashSet<int>(enumA);
hashSet.SymmetricExceptWith(enumB);
Console.WriteLine(hashSet.Count == 0); //true => equal

, Но это действительно только работает правильно, если значения отличны.

, Например

var enumA = new[] { 1, 1, 1, 2 };
var enumB = new[] { 1, 2, 2, 2 };

также рассматриваются как "равный" с упомянутым методом.

3
ответ дан miradulo 7 July 2019 в 23:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: