2012-06-14 8 views
7

Warum sortiert .NET die Zeichen '+' und '^' in einer anderen Reihenfolge als in ASCII table oder wie SQL sie sortiert.Wie sortiert .NET Sonderzeichen?

In ASCII table '+' hat einen Wert von 42 und '^' hat einen Wert von 94, aber wenn Sie laufen Code wie folgt:

var list = new List<string> { "+", "^", "!" }; 
list.Sort(); 

Die Liste wird Werte in der folgenden Reihenfolge enthalten:

{"!", "^", "+"}

LINQ sort erzeugt das gleiche Ergebnis. Kann mir jemand sagen, was für eine Art .NET tut?

+1

Sie sortieren die Zeichen nicht, Sie sortieren Zeichenfolgen. –

Antwort

17

.NET verwendet kein ASCII, es verwendet Unicode. Wenn Sie eine String-Sortierung durchführen, verwendet .NET (standardmäßig) die Regeln der aktuellen Kultur zum Sortieren. In diesem Fall geben diese Regeln an, dass "^" vor "+" steht. Sie können das Ergebnis erhalten Sie mit dem „Ordnungs“ string comparer erwarten:

var list = new List<string> { "+", "^", "!" }; 
list.Sort(StringComparer.Ordinal); // Order is "!", "+", "^" 
+0

+1. Einige Links zu Sortierregeln finden Sie in meiner Antwort auf ähnliche Fragen - http://stackoverflow.com/questions/9475535/order-of-punctuation-marks-vs-letters/9475570#9475570 –

2

Dies wird durch das aktuelle Kultur-Set definiert ist, definiert in der CompareInfo Eigenschaft. Jede Kultur hat kulturspezifische Sortierregeln für Zeichenfolgen.