Heim >Backend-Entwicklung >C++ >Wie kann ein benutzerdefinierter IComparer Linq OrderBy für die nicht standardmäßige String-Sortierung verbessern?
Verwenden eines benutzerdefinierten IComparer
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
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!