Eu notei que muitos métodos de classificação numérica parecem classificar por 1, 10, 2, 3 ... em vez dos 1, 2, 3, 10 esperados ... Estou tendo problemas para apresentar um cenário em que gostaria preciso do primeiro método e, como usuário, fico frustrado sempre que o vejo na prática. Existem casos de uso legítimos para o primeiro estilo no segundo? Se sim, o que são? Se não, como surgiu o estilo de primeira classe? Quais são os nomes oficiais para cada método de classificação?
30
Respostas:
que é uma classificação lexicográfica, o que significa basicamente que o idioma trata as variáveis como strings e compara caractere por caractere (
"200"
é maior que"19999"
porque'2'
é maior que'1'
)para consertar isso você pode
garantir que os valores sejam tratados como números inteiros,
adicione
'0'
as seqüências de caracteres para que todos tenham comprimentos iguais (somente viável quando você souber o valor máximo).É por isso que você verá numerações de episódios em arquivos de mídia (S1E01) com um 0 precedido, para que uma classificação lexicográfica não estrague tudo e permita que os programas simplesmente sejam reproduzidos / exibidos em ordem alfabética,
ou faça um comparador personalizado que compare primeiro o comprimento das cadeias (cadeias mais curtas são números inteiros menores) e, quando iguais, compare o lexicograficamente (cuidado com a liderança
'0'
)fonte
Em ordem alfabética, 1 vem antes de 2. Sempre que você vê o primeiro método, não é porque é desejável, mas porque a classificação é estritamente alfabética (e acontece da esquerda para a direita, um caractere de cada vez): 1, 2, 10 faz sentido para você, mas não para um computador que conhece apenas a comparação alfabética. Não há como esse tipo de comparação simples saber que um seguido de um 0 vem depois de dois.
Quando você vê a classificação mista de palavras e números que trata os números corretamente, é porque a classificação é mais inteligente e, além disso, ainda funciona normalmente apenas no início ou no final de uma string.
fonte
Esse é o resultado quando você ordena seqüências de números alfabeticamente em vez de numericamente.
Esse estilo de classificação é o comportamento padrão do
sort
comando unix, por exemplo, a menos que você use a--numeric-sort
opção de linha de comando, que informa para tentar interpretar os valores numéricos.fonte
Outros têm respostas de que tipo é esse, mas ninguém realmente respondeu à sua pergunta sobre por que você a vê. A resposta não é realmente tão emocionante. Geralmente é um bug. A maioria dos métodos de classificação será padronizada para um ou outro, e a programação provavelmente não fará alterações no padrão ao classificar números.
fonte