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
Freigeben: 2025-01-21 07:52:08
Original
688 Leute haben es durchsucht

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage