he añadido una respuesta a esta pregunta aquí: Sorting List<String>
in C# que exige un orden natural, que maneja los números incrustados.Escribir un mejor tipo natural, (que la mía)
Mi implementación, sin embargo, es ingenua, y en lugar de todas las publicaciones sobre cómo las aplicaciones no manejan correctamente Unicode asumiendo cosas (¿Turquía prueba a alguien?), Pensé que pediría ayuda escribiendo un mejor implementación. O bien, si hay un método incorporado de .NET, dígame :)
Mi implementación para la respuesta en esa pregunta solo pasa por las cadenas, comparando carácter por carácter, hasta que encuentra un dígito en ambos. Luego extrae dígitos consecutivos de ambas cadenas, lo que puede dar como resultado longitudes variables, las almohadillas son las más cortas con ceros a la izquierda y luego se comparan.
Sin embargo, hay problemas con él.
Por ejemplo, ¿qué pasa si en la cadena x tiene dos puntos de código que juntos forman el carácter È, pero en la otra cadena solo tiene un punto de código, el que es ese carácter.
Mi algoritmo fallaría en los que, ya que podría tratar el punto de código diacrítica como un solo carácter, y compararlo a la dirección de la otra cadena.
¿Alguien me puede guiar hacia cómo manejar esto correctamente? Quiero soporte para especificar un objeto CultureInfo
para manejar problemas de idioma, como comparar "ss" con "ß" en Alemania, y cosas similares.
Creo que necesito para obtener mi código para enumerar más de "personajes reales" (no sé el término real aquí) en lugar de puntos de código individuales.
¿Cuál es el enfoque correcto para esto?
Además, si significa "natural", "la forma que los humanos esperan que funcionen", yo añadiría las siguientes cosas a considerar:
- ¿Qué pasa con las fechas y horas?
- ¿Qué pasa con los valores de coma flotante?
- ¿Hay otras secuencias que se consideran "naturales"?
- ¿hasta dónde puede estirar este? (Eeny, Meeny, miny, moe)
Hola hans ... una vez más como siempre ... respuesta increíble ... sólo curiosidad ... ¿cómo llegaste a saber sobre el dll a P/invocar? – Dinesh
Está documentado en el artículo de MSDN para la función, en la parte inferior. –
Lo encontré ... gracias – Dinesh