2009-01-14 9 views
17

Estoy buscando un algoritmo que clasifique cadenas similar a la forma en que los archivos (y carpetas) se ordenan en el Explorador de Windows. Parece que los valores numéricos en cadenas se tienen en cuenta a la hora ordenados que se traduce en algo así comoMétodo de ordenación del Explorador de Windows

name 1, name 2, name 10 

en lugar de

name 1, name 10, name 2 

que se obtiene con una comparación regular de cadena.

Estaba a punto de comenzar a escribir esto yo mismo, pero quería comprobar si alguien había hecho esto antes y estaba dispuesto a compartir algunos códigos o ideas. La forma en que abordaría esto sería agregar ceros a los valores numéricos en el nombre antes de compararlos. Esto daría como resultado algo como

name 00001, name 00010, name 00002 

que cuando se ordena con una ordenación de cadena normal me daría el resultado correcto.

¿Alguna idea?

+1

http://stackoverflow.com/questions/248603/natural-sort-order-in-c-sharp –

Respuesta

14

Se llama "orden de clasificación natural". Jeff tenía un pretty extensive blog entry en él hace un tiempo, que describe las dificultades que puede pasar por alto y tiene enlaces a varias implementaciones.

1

De la forma en que lo entendí, Windows Explorer ordena según su segundo ejemplo: siempre me irrita enormemente que el pedido salga 1, 10, 2. Es por eso que la mayoría de las aplicaciones que escriben muchos archivos (como aplicaciones por lotes) siempre usa nombres de archivos de longitud fija con 0's principales o lo que sea.

Su solución debería funcionar, pero tendría que tener cuidado donde están los números en el nombre del archivo, y probablemente solo use su enfoque si estuvieran al final.

6

Explorer utiliza la API StrCmpLogicalW() para este tipo de clasificación (llamado 'orden de clasificación natural').

No necesita escribir su propia función de comparación, solo use la que ya existe.

Una buena explicación se puede encontrar here.

0

Esta es una oportunidad para implementarlo en Java:

Java - Sort Strings like Windows Explorer

En resumen se divide las dos cadenas para comparar en la Carta - Partes dígito y compara estas piezas de un modo específico para lograr este tipo de clasificación.

Cuestiones relacionadas