Heim > Backend-Entwicklung > C++ > Wie kann ich in LINQ eine alphanumerische Reihenfolge mit numerischen Suffixen erreichen?

Wie kann ich in LINQ eine alphanumerische Reihenfolge mit numerischen Suffixen erreichen?

Patricia Arquette
Freigeben: 2024-12-29 01:29:11
Original
408 Leute haben es durchsucht

How Can I Achieve Alphanumeric Ordering in LINQ with Numeric Suffixes?

Alphanumerische Reihenfolge in LINQ

In LINQ folgt die OrderBy-Methode der lexikografischen Sortierregel, die sowohl alphabetische als auch numerische Zeichen nacheinander berücksichtigt. Beim Sortieren von Zeichenfolgen, die mit numerischen Werten enden, führt diese Reihenfolge jedoch möglicherweise nicht zum gewünschten Ergebnis.

Betrachten Sie das folgende Beispiel:

string[] partNumbers = { "ABC10", "ABC1", "ABC2", "ABC11", "ABC10", "AB1", "AB2", "Ab11" };
var result = partNumbers.OrderBy(x => x);
Nach dem Login kopieren

Das tatsächliche Ergebnis gemäß der lexikografischen Reihenfolge: wird sein:

AB1
Ab11
AB2
ABC1
ABC10
ABC10
ABC11
ABC2
Nach dem Login kopieren

Das erwartete Ergebnis besteht jedoch darin, die ähnlichen alphabetischen Sequenzen zusammenzufassen, unabhängig von der numerischen Suffix. Um dies zu erreichen, müssen wir die Sortierkriterien ändern.

Der Schlüssel zur alphanumerischen Sortierung besteht darin, den aufgefüllten numerischen Teil zu vergleichen. Durch das Auffüllen der numerischen Werte mit Nullen stellen wir sicher, dass LINQ sie richtig unterscheiden kann. So können wir es machen:

public static string PadNumbers(string input)
{
    return Regex.Replace(input, "[0-9]+", match => match.Value.PadLeft(10, '0'));
}
Nach dem Login kopieren

Diese Funktion fügt Nullen zu allen Zahlen innerhalb der Eingabezeichenfolge hinzu. Indem wir diese Funktion als Sortierkriterium in LINQ verwenden, erhalten wir das erwartete Ergebnis:

var result = partNumbers.OrderBy(x => PadNumbers(x));
Nach dem Login kopieren

Die resultierende Liste wird nun wie folgt geordnet:

AB1
AB2
AB11
...
Nach dem Login kopieren

Dieser Ansatz geht davon aus, dass das Maximum Die Anzahl der Ziffern im numerischen Teil ist bekannt. Erwägen Sie für komplexere Fälle die Implementierung eines benutzerdefinierten IComparer, der eine detailliertere Kontrolle der Vergleichskriterien ermöglicht.

Das obige ist der detaillierte Inhalt vonWie kann ich in LINQ eine alphanumerische Reihenfolge mit numerischen Suffixen erreichen?. 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