Heim >Backend-Entwicklung >C++ >Wie kann ein benutzerdefinierter IComparer Linq OrderBy für die nicht standardmäßige String-Sortierung verbessern?

Wie kann ein benutzerdefinierter IComparer Linq OrderBy für die nicht standardmäßige String-Sortierung verbessern?

DDD
DDDOriginal
2025-01-01 08:37:13183Durchsuche

How Can a Custom IComparer Enhance Linq OrderBy for Non-Standard String Sorting?

Verwenden eines benutzerdefinierten IComparer mit Linq OrderBy

In Linq verwendet die OrderBy-Methode standardmäßig die natürliche Reihenfolge der Elemente. Wenn Sie jedoch mit komplexen Datentypen wie Zeichenfolgen mit einer bestimmten Formatierung arbeiten, ist ein benutzerdefinierter IComparer kann erforderlich sein, um das gewünschte Sortierverhalten zu erreichen.

Ein solches Szenario beinhaltet das Sortieren einer Liste von Rechnungsnummern im Format „jjjjMMtt/nn“. Die Standardreihenfolge würde aufgrund des Vorhandenseins sowohl numerischer als auch alphanumerischer Zeichen zu falschen Ergebnissen führen.

Ein benutzerdefinierter Vergleicher, MyComparer, wird erstellt, um die Rechnungsnummer in ihre Teile zu analysieren und auf deren Grundlage zu sortieren. Allerdings vergleicht die initiale Implementierung von MyComparer nur die einzelnen Bestandteile der Rechnungsnummer als Strings. Dies führt dazu, dass die Rechnungsnummern lexikografisch und nicht numerisch sortiert werden.

Die korrigierte Version von MyComparer wandelt die Rechnungsnummernkomponenten vor dem Vergleich in ganze Zahlen um und stellt so sicher, dass die Sortierung in der erwarteten numerischen Reihenfolge erfolgt. Dies wird erreicht, indem int.Parse() verwendet wird, um die Zeichenfolgen in Ganzzahlen umzuwandeln.

Zusätzlich muss die Artikelliste wieder der Items-Eigenschaft der BindingList<-Methode zugewiesen werden, um die in der ApplySortCore-Methode vorgenommenen Änderungen widerzuspiegeln. T>:

this.Items = items;

Mit diesen Änderungen sortiert der MyComparer die Rechnungsnummern korrekt in der gewünschten Reihenfolge und stellt so sicher, dass die Liste verbindlich ist entsprechend aktualisiert.

Das obige ist der detaillierte Inhalt vonWie kann ein benutzerdefinierter IComparer Linq OrderBy für die nicht standardmäßige String-Sortierung verbessern?. 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