Vergleichen Sie ungeordnete Listen
Bestimmen, ob zwei List
Wenn die Häufigkeit des Vorkommens jedes Elements wichtig ist, besteht eine einfache Lösung darin, beide Listen vor dem Vergleich zu sortieren:
<code class="language-csharp">Enumerable.SequenceEqual(list1.OrderBy(t => t), list2.OrderBy(t => t))</code>
Optimierungslösung für IEquatable-Elemente
Für Elemente, die nur die IEquatable-Schnittstelle (anstelle von IComparable) implementieren müssen, gibt es einen effizienteren Ansatz:
<code class="language-csharp">public static bool ScrambledEquals<T>(IEnumerable<T> list1, IEnumerable<T> list2) { var cnt = new Dictionary<T, int>(); foreach (T s in list1) { cnt[s] = cnt.GetValueOrDefault(s, 0) + 1; } foreach (T s in list2) { if (cnt.ContainsKey(s)) cnt[s] -= 1; else return false; } return cnt.Values.All(x => x == 0); }</code>
Dieses Schema zählt die Anzahl der Vorkommen jedes Elements in der ersten Liste und subtrahiert dann die Anzahl der Vorkommen von der zweiten Liste. Die beiden Listen gelten als gleich, wenn jede Zählung Null erreicht.
Umgang mit benutzerdefinierten Schlüsseltypen
Wenn die Elementtypen nicht vergleichbar sind (z. B. nullfähige Typen), können Sie einen Komparator für das Wörterbuch angeben:
<code class="language-csharp">public static bool ScrambledEquals<T>(IEnumerable<T> list1, IEnumerable<T> list2, IEqualityComparer<T> comparer) { var cnt = new Dictionary<T, int>(comparer); ... }</code>
Das obige ist der detaillierte Inhalt vonWie kann ich zwei ungeordnete Listen in C# effizient auf Gleichheit vergleichen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!