Elementreihenfolge für Listenäquivalenzvergleiche ignorieren
Wenn Sie zwei List<T>
Objekte vergleichen, möchten Sie normalerweise prüfen, ob ihre Elemente gleich sind, unabhängig von ihrer Position in der Liste. Hier sind einige Möglichkeiten, dies zu erreichen.
1. Elementgleichheit und Häufigkeit des Vorkommens
Wenn Sie zwei Listen benötigen, die dieselben Elemente mit der gleichen Häufigkeit enthalten, empfiehlt es sich, vor dem Vergleich zu sortieren:
<code class="language-csharp">Enumerable.SequenceEqual(list1.OrderBy(t => t), list2.OrderBy(t => t))</code>
2. Optimierungsmethode
Um die Leistung zu verbessern, insbesondere beim Umgang mit großen Listen, können Sie diese benutzerdefinierte Methode verwenden, die nur IEquatable
implementiert werden muss:
<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.ContainsKey(s) ? cnt[s] + 1 : 1; } foreach (T s in list2) { if (cnt.ContainsKey(s)) { cnt[s]--; } else { return false; } } return cnt.Values.All(c => c == 0); }</code>
3. Umgang mit nullbaren Typen
Wenn Ihr Element einen Nullable-Typ hat, können Sie den benutzerdefinierten Komparator eines Wörterbuchs verwenden:
<code class="language-csharp">var comparer = EqualityComparer<T>.Default; var cnt = new Dictionary<T, int>(comparer);</code>
Das obige ist der detaillierte Inhalt vonWie kann ich zwei Listen auf Gleichheit vergleichen und dabei die Reihenfolge der Elemente ignorieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!