Heim > Backend-Entwicklung > C++ > Wie kann LINQ eine korrekte alphanumerische Sortierung von Zeichenfolgen mit Zahlen erreichen?

Wie kann LINQ eine korrekte alphanumerische Sortierung von Zeichenfolgen mit Zahlen erreichen?

Susan Sarandon
Freigeben: 2024-12-29 06:59:15
Original
900 Leute haben es durchsucht

How Can LINQ Achieve Correct Alphanumeric Sorting of Strings Containing Numbers?

Alphanumerische Sortierung mit LINQ

Beim Umgang mit Zeichenfolgen, die numerische Werte enthalten, führt die standardmäßige alphabetische Sortierung in LINQ möglicherweise nicht zu den gewünschten Ergebnissen. Betrachten Sie das folgende Beispiel:

string[] partNumbers = new string[] 
{ 
    "ABC10", "ABC1","ABC2", "ABC11","ABC10", "AB1", "AB2", "Ab11" 
};

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

Das erwartete Ergebnis würde die Zeichenfolgen wie folgt ordnen:

AB1
AB2
AB11
...
Nach dem Login kopieren
Nach dem Login kopieren

Das tatsächliche Ergebnis weicht jedoch ab, da die Standardreihenfolge der Zeichenfolgen der lexikografischen Reihenfolge folgt. Das bedeutet, dass numerische Werte von links nach rechts verglichen werden, was zu folgender Reihenfolge führt:

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

Um die gewünschte alphanumerische Sortierung zu erreichen, müssen wir die Vergleichslogik ändern. Wir können den numerischen Teil jeder Zeichenfolge mit einer bestimmten Anzahl von Nullen auffüllen. Dadurch wird sichergestellt, dass die numerischen Werte unabhängig von ihrer Länge fair verglichen werden.

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

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

Mit dieser geänderten Reihenfolge werden die numerischen Teile der Zeichenfolgen basierend auf ihren aufgefüllten Werten verglichen, was zu der folgenden korrekten Reihenfolge führt:

AB1
AB2
AB11
...
Nach dem Login kopieren
Nach dem Login kopieren

Beachten Sie, dass dieser Ansatz eine maximale Anzahl von Ziffern für Zahlen in der Eingabe voraussetzt. Wenn es Zahlen mit mehr Ziffern als der angegebenen Auffüllung gibt, ist die Sortierung möglicherweise nicht korrekt.

Das obige ist der detaillierte Inhalt vonWie kann LINQ eine korrekte alphanumerische Sortierung von Zeichenfolgen mit Zahlen 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