Heim >Backend-Entwicklung >C++ >Wie kann ich zwei ungeordnete Listen in C# effizient auf Gleichheit vergleichen?

Wie kann ich zwei ungeordnete Listen in C# effizient auf Gleichheit vergleichen?

Susan Sarandon
Susan SarandonOriginal
2025-01-21 07:52:08689Durchsuche

How Can I Efficiently Compare Two Unordered Lists for Equality in C#?

Vergleichen Sie ungeordnete ListenObjekte auf Gleichheit

Bestimmen, ob zwei List-Objekte gleich sind, ist ein häufiges Problem. Obwohl sie dieselben Elemente enthalten können, kann ihre Reihenfolge unterschiedlich sein. Dies wirft die Frage auf: Wie vergleicht man Elemente unabhängig von ihrer Reihenfolge?

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn