2010-04-12 5 views
6

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

Antwort

4

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.

+0

Wir hatten die gleiche Idee! Du hast Code geschrieben, also bekommst du eine Verbesserung! – msarchet

+0

Danke für Ihre Anregung, ich werde versuchen – drop

+0

@Dean Harding, + 1Danke auf die Idee. – Hadas

0

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.

+0

Danke, ich kann versuchen – drop

0

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.

+0

Danke, Ihre Hilfe – drop

1

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); 
    } 

} 
Verwandte Themen