2016-07-30 4 views

Antwort

3
list.Sort((x, y) => x.Substring(3).CompareTo(y.Substring(3))); 
0

Dies sollte es tun - List<string> ist Ihre ursprüngliche Liste Variable

[List<string>].OrderBy(s => s.Substring(3)).ToList(); 

Dies funktioniert

var l = new List<string>(){"us unites states","uk united kingdom","ca canada"}; 
foreach (var s in l.OrderBy(s => s.ToLower().Substring(3)).ToList()) 
    Console.WriteLine(s); 

Hinweis ToLower, so dass Sie Großbuchstaben nicht vergleichen Kleinbuchstaben (Wenn Sie beide haben)

1

Im Gegensatz zu den anderen Antworten, diese Art von performi ng die Art wird nicht unnötige Teilstrings erstellen. Stattdessen nutzt es die vorhandene string.Compare(strA, indexA, strB, indexB, length) Überladung, die String-Offsets für den Vergleich akzeptiert.

list.Sort((s1, s2) => string.Compare(s1, 3, s2, 3, int.MaxValue)); 

Es gibt andere nützliche string.Compare Überlastungen, die auch Offsetwerte annehmen, dass Sie das Vergleichsverhalten zu optimieren, nutzen können. (z. B .: Ignorieren von Fällen usw.)

+0

+ 1 für die Verwendung vorhandener Vergleichsoperationen, ohne die Zeichenfolgenliterale zu ändern. Alles was ich hinzufügen würde ist eine Längenüberprüfung, um sicherzustellen, dass 's1' und' s2' beide mindestens 4 Zeichen lang sind (um eine mögliche 'ArgumentOutOfRangeException' zu vermeiden) –

+1

@PhilGref Und was zu tun ist, wenn eine Zeichenkette kürzer als 3 Zeichen ist ? Sollte es ignoriert werden oder dazu führen, dass eine benutzerdefinierte Ausnahme ausgelöst oder ein Warnhinweis gesetzt wird? Ohne es zu wissen, könnte es eine bessere Option sein, die Standardfehlerbehandlung beizubehalten. – AlexD

Verwandte Themen