Alphanumerische Sortierung mit LINQ
Das Sortieren alphanumerischer Zeichenfolgen, bei denen jedes Element mit einem numerischen Wert endet, kann mit dem Standardsortiermechanismus von LINQ eine Herausforderung darstellen. Das Problem entsteht, wenn man sich ausschließlich auf die alphabetische Reihenfolge verlässt, was zu unerwarteten Sortierausgaben führt.
Betrachten Sie das folgende String-Array:
string[] partNumbers = new string[] { "ABC10", "ABC1", "ABC2", "ABC11", "ABC10", "AB1", "AB2", "Ab11" };
Die direkte Anwendung der OrderBy-Methode von LINQ führt zu der folgenden sortierten Ausgabe:
AB1 Ab11 AB2 ABC1 ABC10 ABC10 ABC11 ABC2
Dieses Ergebnis weicht von der gewünschten Erwartung ab, da die Zahlenwerte am Ende nicht berücksichtigt werden richtig.
Lösung
Um die beabsichtigte Sortierung zu erreichen, ist es notwendig, die numerischen Teile der Zeichenfolgen im Sortierschlüssel aufzufüllen. Dies kann mit einer benutzerdefinierten Methode wie PadNumbers erreicht werden, die wie folgt definiert ist:
public static string PadNumbers(string input) { return Regex.Replace(input, "[0-9]+", match => match.Value.PadLeft(10, '0')); }
Diese Methode ersetzt jede numerische Sequenz in der Eingabezeichenfolge durch ihr aufgefülltes Äquivalent. Durch die Verwendung dieser Methode innerhalb der OrderBy-Klausel werden die numerischen Teile zum Vergleich effektiv normalisiert:
var result = partNumbers.OrderBy(x => PadNumbers(x));
Dieser Ansatz stellt sicher, dass die numerischen Werte unabhängig von ihrer Länge gleich behandelt werden, was zur gewünschten alphanumerischen Sortierung führt:
AB1 AB2 AB11 ...
Während diese Lösung eine maximale Anzahl von Ziffern für Zahlen voraussetzt, bietet sie eine robuste Methode für die alphanumerische Sortierung LINQ.
Das obige ist der detaillierte Inhalt vonWie kann ich alphanumerische Zeichenfolgen mit numerischen Suffixen mithilfe von LINQ korrekt sortieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!