He notado que muchos métodos de clasificación numérica parecen ordenar por 1, 10, 2, 3 ... en lugar de los esperados 1, 2, 3, 10 ... Tengo problemas para encontrar un escenario en el que lo haría necesito el primer método y, como usuario, me siento frustrado cada vez que lo veo en la práctica. ¿Hay casos de uso legítimo para el primer estilo sobre el segundo? Si es así, ¿Que son? Si no, ¿cómo surgió el primer estilo de clasificación? ¿Cuáles son los nombres oficiales de cada método de clasificación?
31
Respuestas:
es decir, la clasificación lexicográfica, lo que significa que básicamente el lenguaje trata las variables como cadenas y compara caracteres por caracteres (
"200"
es mayor que"19999"
porque'2'
es mayor que'1'
)para arreglar esto puedes
asegúrese de que los valores se traten como enteros,
anteponer
'0'
las cadenas para que todos tengan la misma longitud (solo viable cuando se conoce el valor máximo).Es por eso que verá numeraciones de episodios en archivos multimedia (S1E01) con un 0 antepuesto para que una clasificación lexicográfica no arruine las cosas y permita que los programas simplemente se reproduzcan / muestren en orden alfabético,
o haga un comparador personalizado que primero compare la longitud de las cadenas (las cadenas más cortas son enteros más pequeños) y, cuando son iguales, compare la lexicografía (cuidado con el inicio
'0'
)fuente
Alfabéticamente, 1 viene antes que 2. Siempre que vea el primer método, no es porque sea deseable, sino porque la clasificación es estrictamente alfabética (y ocurre de izquierda a derecha, un carácter a la vez): 1, 2, 10 tiene sentido para usted pero no para una computadora que solo conoce la comparación alfabética. No hay manera en ese tipo de comparación simple de saber que un uno seguido de un 0 realmente viene después un dos.
Cuando ve una clasificación mixta de palabras y números que trata los números correctamente, es porque la clasificación es más inteligente y, además, generalmente solo funciona al principio o al final de una cadena.
fuente
Ese es el resultado cuando ordena cadenas de números alfabéticamente en lugar de numéricamente.
Ese estilo de clasificación es el comportamiento predeterminado del
sort
comando unix, por ejemplo, a menos que use la--numeric-sort
opción de línea de comando, que le dice que intente interpretar los valores numéricos.fuente
Otros tienen respuestas sobre qué es este tipo, pero nadie realmente respondió a su pregunta sobre por qué lo ve. La respuesta no es realmente tan emocionante. Suele ser un error. La mayoría de los métodos de clasificación serán predeterminados a uno u otro y la programación probablemente no tenga cuidado de cambiar el valor predeterminado al ordenar los números.
fuente