J'ai remarqué que de nombreuses méthodes de tri numérique semblent trier par 1, 10, 2, 3 ... plutôt que les 1, 2, 3, 10 attendus ... J'ai du mal à trouver un scénario où je le ferais J'ai besoin de la première méthode et, en tant qu'utilisateur, je suis frustré chaque fois que je la vois dans la pratique. Existe-t-il des cas d'utilisation légitimes pour le premier style par rapport au second? Si c'est vrai, que sont-ils? Sinon, comment est né le premier style de tri? Quels sont les noms officiels de chaque méthode de tri?
31
Réponses:
c'est-à-dire le tri lexicographique qui signifie fondamentalement que la langue traite les variables comme des chaînes et compare caractère par caractère (
"200"
est supérieur à"19999"
parce'2'
que supérieur à'1'
)pour résoudre ce problème, vous pouvez
s'assurer que les valeurs sont traitées comme des entiers,
ajouter
'0'
aux chaînes de sorte que toutes aient des longueurs égales (viable uniquement lorsque vous connaissez la valeur maximale).C'est pourquoi vous verrez les numérotations des épisodes sur les fichiers multimédias (S1E01) avec un 0 ajouté afin qu'un tri lexicographique ne gâche pas les choses et permette aux programmes de simplement jouer / s'afficher dans l'ordre alphabétique,
ou créez un comparateur personnalisé qui compare d'abord la longueur des chaînes (les chaînes plus courtes étant des entiers plus petits) et quand elles sont égales, comparez le lexicographiquement (faites attention au début
'0'
)la source
Par ordre alphabétique, 1 précède 2. Chaque fois que vous voyez la première méthode, ce n'est pas parce qu'elle est souhaitable, mais parce que le tri est strictement alphabétique (et se fait de gauche à droite, un caractère à la fois): 1, 2, 10 est logique à vous mais pas à un ordinateur qui ne connaît que la comparaison alphabétique. Il n'y a aucun moyen dans ce genre de comparaison simple de savoir qu'un un suivi d'un 0 vient en fait après un deux.
Lorsque vous voyez un tri mixte de mots et de nombres qui traite correctement les nombres, c'est parce que le tri est plus intelligent, et en plus de cela, il ne fonctionne généralement qu'au début ou à la fin d'une chaîne.
la source
C'est le résultat lorsque vous triez des chaînes de chiffres par ordre alphabétique plutôt que numérique.
Ce style de tri est le comportement par défaut de la
sort
commande unix par exemple, sauf si vous utilisez l'--numeric-sort
option de ligne de commande, qui lui dit d'essayer d'interpréter les valeurs numériques.la source
D'autres ont des réponses sur ce type, mais personne n'a vraiment répondu à votre question sur la raison pour laquelle vous le voyez. La réponse n'est pas vraiment passionnante. C'est généralement un bug. La plupart des méthodes de tri seront par défaut l'une ou l'autre et la programmation sera probablement insouciante de changer la valeur par défaut lors du tri des nombres.
la source