Prüfen Sie, ob zwei Listen haben die gleichen Elemente
Ich habe zwei Listen, wie unten, wie kann ich sagen, dass Sie die gleichen Elemente enthalten. Die Reihenfolge ist nicht wichtig.
var list1 = new List<int> {1,2,3};
var list2 = new List<int> {2,1,3};
Wie kann ich sagen, dass diese gleich sind? Sollte ich schreiben, dass meine eigene Methode, oder gibt es eine integrierte Methode für Sie?
- Ich glaube nicht, dass es etwas gibt, eingebaut... guter Kandidat für eine Erweiterung Methode
InformationsquelleAutor Vahid | 2014-06-23
Schreibe einen Kommentar Antworten abbrechen
Du musst angemeldet sein, um einen Kommentar abzugeben.
Das ist, was unterscheidet (z.B.,
HashSet<T>
) sind für. Sets haben keine definierte Reihenfolge, undSetEquals
überprüft, ob die set-und eine weitere Sammlung, die gleichen Elemente enthalten.Equals
(+GetHashCode
). Sie können auch einen benutzerdefiniertenIEqualityComparer<T>
an den Konstruktor vonHashSet
Lesen: stackoverflow.com/questions/8952003/...Können Sie
!Except
+Any
:Dieser prüft dann nicht, wenn beide die gleichen Elemente, aber wenn Liste1 enthalten ist, in liste2(ignorieren Duplikate).
Wenn Sie wissen möchten, ob
list2
ist enthalten inlist1
verwenden:Also musste man beide prüft, ob Sie wollte, um sicherzustellen, dass beide Listen enthalten die gleichen Elemente.
Wenn Sie wollen auch zu berücksichtigen, dass beide Listen die gleiche Größe haben, Vorprüfung mit
list1.Count==list2.Count
.Aber diese Prüfung ist nicht hilfreich, wenn Sie eine set-Methode(siehe Harald ' s Kommentar), es macht nicht viel Sinn zu vergleichen, die zählt, wenn Sie ignorieren die Duplikate danach.
Im Allgemeinen
HashSet<T>
hat einige schöne und effiziente Methoden, um zu überprüfen, ob zwei Sequenzen die gleichen Elemente(ignorieren Duplikate), dcastro bereits zeigte ein.Wenn Sie möchten, eine effiziente Lösung zu bestimmen, ob zwei Listen enthalten die gleichen Elemente, gleiche Anzahl und nicht ignorieren Duplikate aber ignoriert die Reihenfolge(ansonsten
SequenceEquals
):Verwendung:
Wenn die Reihenfolge spielt eine Rolle und Duplikate zu zählen, verwenden Sie:
dcastro
?dcastro
's Methode ignoriert Duplikate?Count
überprüfen könnte effizient sein, aber die count-egal(da Duplikate eh ignoriert werden) oder ein nicht-set-Ansatz erforderlich ist, sowieso. Ich habe meine Kommentare entferntCount
da habe ich bearbeitet meine Antwort. Ich glaube nicht, dass dieCount
überprüfung ist sinnvoll, in diesem Fallnull
Artikel seitDictionary
nicht.itemCounts.Add(s,1)
wirftArgumentNullException
wenns
istnull
.Ohne die Verwendung von linq.
SequenceEquals
Methode.Können Sie versuchen, Außer
Except
gibt die Elemente in der ersten, die erscheinen nicht in der zweitenstring
? Außerdem, wo ist der Scheck für die Gleichstellung?list1
ist leer, das gibt eine leere Liste zurück, das bedeutet nicht, dass beide gleich sind. Sie schlägt auch dann fehl, wenn list1 ist eine Teilmenge von liste2. Abgesehen davon ist es nicht notwendig, erstellen Sie eine weitere Sammlung, nur um zu überprüfen, ob die beiden Listen gleich sind.