2016-11-16 3 views
-2

Wie kann ich eine Liste von Benutzern nach Nachnamen in den folgenden Formaten sortieren?C# Sortierliste in alphabetischer Reihenfolge

first.last

first.mi.last

mylist.Sort(); 

sortiert nach Vornamen, und das ist nicht das, was ich tun möchte. Muss ich irgendwie eine RegEx verwenden?

+2

Was in Ihrer Liste ist

var list = new List<string> { "c.a", "a.c" , "b"}; 

Sie sie wie folgt bestellen können? –

Antwort

1

Unter der Annahme, dass Ihre Namen sind einfache Strings (und keine Objekte mit Vorname und Nachname Eigenschaften) wie folgt aus:

var orderedList = list.OrderBy(item => item.Split('.').Last()); 

Ausgabe::

c.a 
b 
a.c 
4

können Sie Linq benutzen, um Ihre Benutzer zu bestellen:

using System.Linq; 
mylist.OrderBy(x => x.LastName); 

Wenn Sie denselben Nachnamen haben, können Sie Benutzer von mittleren Namen bestellen. Wenn Sie denselben Vornamen haben, können Sie Benutzer bestellen, indem zuerst Name:

mylist.OrderBy(x => x.LastName).ThenBy(x => x.MiddleName).ThenBy(x => x.FirstName); 
+0

Meine Liste ist definiert als Liste Meine Liste = neue Liste (); . Muss ich die Art ändern, wie es definiert ist? – Dawn555

+0

@ Dawn555 Ja. Sie benötigen eine Liste mit einem Typ mit den Eigenschaften 'Vorname',' Nachname' und 'Zwischenname'. Der Stringtyp wird dafür nicht funktionieren. – dckuehn

+0

@ Dawn555 Ja, Sie sollten eine 'User' Klasse mit 3 Eigenschaften erstellen:' LastName', 'MiddleName' und' FirstName'. Und dann solltest du 'List mylist = new List ();' erstellen –

0

Wenn Sie anstelle sortieren wollen, versuchen specifing vergleich

mylist.Sort((left, right) => string.Compare(left.LastName, right.LastName)); 

Bei myliststring Elemente enthält, Sie haben LastName zu extrahieren:

private static String LastName(string value) { 
    if (string.IsNullOrEmpty(value)) 
    return value; 

    int p = value.LastIndexOf('.'); 

    return value.SubString(p + 1); 
} 

... 

mylist.Sort((left, right) => string.Compare(LastName(left), LastName(right))); 
Verwandte Themen