57 Stimmen

C#: Inhalt von zwei IEnumerables vergleichen

Gibt es eine eingebaute Linq-Methode, die ich verwenden kann, um herauszufinden, ob zwei Sequenzen die gleichen Elemente enthält, ohne die Reihenfolge zu berücksichtigen?

Zum Beispiel:

{1, 2, 3} == {2, 1, 3}
{1, 2, 3} != {2, 1, 3, 4}
{1, 2, 3} != {1, 2, 4}

Sie haben die SequenceEquals, aber dann müsste ich erst beide Sequenzen bestellen, nicht wahr?

1voto

Bob The Janitor Punkte 19674

Ich habe dies getan, um neue Elemente ohne Duplikate in eine Sammlung zu integrieren, es nimmt zwei Sammlungen und gibt alle Elemente ohne Duplikate zurück

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

Indem Sie nun das ! für die Anweisung contains entfernen

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

werden die Duplikate zurückgegeben

1voto

Harshal Punkte 85

Um die Daten in den beiden Objekten zu vergleichen, habe ich einfach Folgendes verwendet

A.Except(B).Any() || B.Except(A).Any()

0voto

mmx Punkte 400975

Ich denke, die Reihenfolge ist der schnellste Weg, um dies zu erreichen.

0voto

Daniel Punkte 1496

Wenn Sie wirklich nur testen wollen, ob es Duplikate gibt, dann sollte der Vorschlag von leppie funktionieren:

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

Aber wenn Sie nur zu einem IEnumerable ohne Duplikate kommen müssen:

var result = A.Union(B).Distinct();

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X