Eingang sortieren:Wie Zahl in alphanumerischen
SHC 111U, SHB 22x ,, SHA 5555G
Benötigte Leistung:
SHB 22X, SHC 111U, SHA 5555G
Ich muss nur Vehicle no
im Parkbereich nicht pref. Sortieren ix und Suffix Buchstabe
Eingang sortieren:Wie Zahl in alphanumerischen
SHC 111U, SHB 22x ,, SHA 5555G
Benötigte Leistung:
SHB 22X, SHC 111U, SHA 5555G
Ich muss nur Vehicle no
im Parkbereich nicht pref. Sortieren ix und Suffix Buchstabe
Fantastisch, gut optimierte Open Source Lösung bei http://dotnetperls.com/alphanumeric-sorting
Es gibt nichts eingebaut, um dies zu tun, aber Sie können es tun, indem Sie zuerst die Zahlen und die Sortierung danach extrahieren. Zum Beispiel:
class VehicleNumberComparer : IComparer<string>
{
public int Compare(string lhs, string rhs)
{
var numExtract = new Regex("[0-9]+");
int lhsNumber = int.Parse(numExtract.Match(lhs).Value);
int rhsNumber = int.Parse(numExtract.Match(rhs).Value);
return lhsNumber.CompareTo(rhsNumber);
}
}
Dies ist nicht getestet (und wird wahrscheinlich nicht einmal ohne Änderungen kompiliert), hat keine Fehlerprüfung, und wahrscheinlich nicht die schnellste Methode in der Welt, aber sollen Ihnen eine Idee geben.
Ein guter Weg, dies zu tun, so etwas wie dieses
zu tun wäre, um einen regulären Ausdruck schreiben Sie einfach den numerischen Teil des Namens übereinstimmen setzen, dass die erste ist die Zahl in einer Sammlung von paarigen ganzzahligen Werten, Sie haben von Ihrer Zeichenkette genommen und die zweite ist der Index der Nummer in der ursprünglichen Liste. Sortieren Sie dann die zweite Liste und ordnen Sie dann die erste Liste mit der zweiten Nummer in Ihrer Sammlung neu an.
Danke, ich kann versuchen – drop
Verwenden Sie eine Sortiermethode, die ein Objekt IComparer akzeptiert und übergeben Sie Ihre Sammlung von Fahrzeugnummern. Sie müssen eine benutzerdefinierte Klasse definieren, die IComparer implementiert. In der Compare-Methode dieser Klasse können Sie Code schreiben, um die beiden Fahrzeugnummern zu vergleichen. Sie sollten wahrscheinlich eine Regex verwenden, um den numerischen Teil der Fahrzeugnummer zu extrahieren.
Danke, Ihre Hilfe – drop
Wenn es möglich ist, eine Platte ohne eine Nummer zu haben, dann sollten Sie das überprüfen.
static int SortPlate(string plate)
{
int plateNumber;
Regex regex = new Regex(@"\d+");
Int32.TryParse(regex.Match(plate).Value, out plateNumber);
return plateNumber;
}
static void Main(string[] args)
{
IEnumerable<string> data = new List<string>() {"SHC 111U", "SHB 22x", "SHA 5555G", "HOT STUFF"};
var sortedList = from z in data
orderby SortPlate(z)
select z;
foreach (string plate in sortedList)
{
Console.WriteLine(plate);
}
}
Wenn es absolut unmöglich und das Ende der Welt ist kommen würde, bevor es überhaupt eine Platte ohne Zahlen könnte dann wird diese verkürzte Form arbeiten:
static void Main(string[] args)
{
IEnumerable<string> data = new List<string>() {"SHC 111U", "SHB 22x", "SHA 5555G"};
Regex regex = new Regex(@"\d+");
var sortedList = from z in data
orderby Int32.Parse(regex.Match(z).Value)
select z;
foreach (string plate in sortedList)
{
Console.WriteLine(plate);
}
}
Vielen Dank für eine gute Referenz Artikel – drop