Yo uso string.Compare (strA, strB, true, CultureInfo.CurrentCulture); y no entiendo el resultado. CurrentCulture es "de-DE". string.Compare ("o", "ö", true, CultureInfo ....

3
Udo 14 mar. 2021 a las 12:43

2 respuestas

La mejor respuesta

En su Comparer A , tiene el código

return string.Compare(x, y, true, CultureInfo.CurrentCulture);

Lo que significa que está utilizando el CurrentCulture que es alemán, como creo, por lo que el alfabeto alemán como noté en Internet está en la siguiente secuencia

A, B, C, D, E, F, G, H, I, J, K, L, M, N, O , P, Q, R, S, T, U, V , W, X, Y, Z, Ä, Ö , Ü, ß

Entonces, la clasificación será en consecuencia, así que lo que obtienes actualmente es el correcto , creo, pero si aún necesitas hacer lo que deseas y estás dispuesto a usar otro { {X0}} donde la secuencia de O, Ö está una detrás de la otra como "tr-TR" en turco, entonces el código debería ser este:

return string.Compare(x, y, true, new CultureInfo("tr-TR"));

Que le está dando el siguiente resultado:

Dart vadder
Dont sleep
Family
Friends
Oasis
Oxfort
Ö3 Greatest Hits
Ödipus
Österreich
Panda
Update

La otra opción es desarrollar su función y algoritmo de clasificación personalizados que considere cualquier secuencia de caracteres que desee.

2
Useme Alehosaini 14 mar. 2021 a las 16:37

Creo que en el orden alfabético alemán, el carácter especial ö está representado internamente por oe.

Entonces string.Compare( "o", "ö", true, System.Globalization.CultureInfo.CurrentCulture); es equivalente a string.Compare( "o", "oe", true, System.Globalization.CultureInfo.CurrentCulture);.

Y string.Compare( "ox", "öa", true, System.Globalization.CultureInfo.CurrentCulture); es equivalente a string.Compare( "ox", "oea", true, System.Globalization.CultureInfo.CurrentCulture);. Entonces el resultado 1 tiene sentido.

3
user2250152 14 mar. 2021 a las 10:04