PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : C#: string.Compare


Elemental
2006-05-20, 08:03:19
Hallo,
ich hab ne kleine Frage zu String.Compare, da ich gerade eine ListView sortiere.
In der ListView sind folgende strings:
"planet radio"
"P-KLASSIK"
"P-LOVE SONGS"


int res = String.Compare("planet radio", "P-KLASSIK") // res ist 1
int res = String.Compare("P-LOVE SONGS", "P-KLASSIK") // res ist 1
int res = String.Compare("P-LOVE SONGS", "planet radio") // res ist 1


Das bedeutet
"planet radio" > "P-KLASSIK"
"P-LOVE SONGS" > "P-KLASSIK"
"P-LOVE SONGS" > "planet radio"

Die sortierte Spalte sieht dann so aus:
"P-KLASSIK"
"planet radio"
"P-LOVE SONGS"


Aber wieso? "P-KLASSIK" und "P-LOVE SONGS" beginnen beide mit "P-", darum hätte ich erwartet, dass die nach dem sortieren auch nacheinander stehen :confused:

mfG
Elemental

Kabelsalat
2006-05-20, 11:04:26
Der Vergleich wird standardmäßig unter Beachtung von Wortsortierregeln durchgeführt und zwar mit CompareOptions.None:

".NET Framework unterstützt Wort-, Zeichenfolgen- und Ordinalsortierregeln. Bei der Wortsortierung wird ein kulturabhängiger Vergleich von Zeichenfolgen ausgeführt, in dem bestimmten nicht alphanumerischen Unicode-Zeichen ggf. eine bestimmte Gewichtung zugewiesen wird. Beispielsweise wird dem Bindestrich ("-") möglicherweise eine sehr geringe Gewichtung zugewiesen, sodass "coop" und "co-op" in einer sortierten Liste nebeneinander auftreten. Eine Zeichenfolgensortierung ähnelt einer Wortsortierung mit dem Unterschied, dass es keine Sonderfälle gibt und alle nicht alphanumerischen Symbole vor allen alphanumerischen Unicode-Zeichen eingeordnet werden. Eine Ordinalsortierung vergleicht Zeichenfolgen anhand des numerischen Werts jedes Char-Objekts in der Zeichenfolge. Weitere Informationen über Wort-, Zeichenfolgen- und Ordinalsortierregeln finden Sie unter CompareOptions."

Elemental
2006-05-21, 08:00:11
Danke!

Mit

String.Compare(strText1, strText2, StringComparison.Ordinal);

bekomme ich das gewünschte Ergebnis :)

mfG