Partager via


Windows confidentielles : L'évolution de tri

Le développement des algorithmes de tri dans Windows Explorer a été jusqu’ici une histoire un peu compliquée.

Raymond Chen

L'Explorateur Windows a commencé avec un algorithme de tri très simple. Elle triée simplement les noms de fichiers en fonction de la fonction « lstrcmpi ». Cette opération effectuée une comparaison des paramètres régionaux spécifiques, sans respecter la casse. Cette même fonction de comparaison était plutôt compliquée à l'époque. Par exemple, elle a donné à un traitement spécial pour les traits d'union et les apostrophes.

Par conséquent, lors du tri des noms de fichier pour l'affichage dans l'Explorateur Windows de Windows 95, qu'elle placerait file139 à l'avance de file20. Ceci est parfaitement logique du point de vue du programmeur d'un ordinateur. Il est également totalement intuitif pour des êtres humains normaux, prouvant ainsi que les programmeurs ne sont pas des êtres humains normaux.

Dans Windows XP, Microsoft mis à jour de l'algorithme de tri de l'Explorateur Windows pour être plus conforme aux attentes de l'organisme humain normal. Il traité des chiffres dans les noms de fichier sous forme de nombres plutôt que des séquences de caractères. Bien que cette amélioration du tri pour la plupart des gens, ont été les cas où cette modification a entraîné quelques surprises.

Un exemple est réapparu fréquemment était des noms de fichiers contenant des valeurs hexadécimales. Sous le nouveau basée sur le numéro de tri, l'Explorateur Windows supposé qu'un fichier nommé « 1040A » doit être triée légèrement après « 1040 », et loin de constituer un fichier nommé « 103F2 ». Si pour une raison quelconque, vous avez l'habitude d'affichage des dossiers complets des fichiers dont les noms sont les valeurs hexadécimales, vous pouvez définir la stratégie « Désactiver le tri numérique dans l'Explorateur Windows. » Cette stratégie modifie tri arrière pour qu'elle était dans les versions de Windows antérieures à Windows XP — à savoir, caractère par caractère.

Périodes et des espaces

Dans Windows Vista, il a été un tweak tiny apportée à l'algorithme de comparaison, car périodes servent Jacques. Ils sont des caractères traditionnels par jour, mais elles servent également comme marqueurs de l'extension de fichier par nuit. Par conséquent, un fichier nommé fichier 1.txt behaviour counter-intuitively en cours de tri après fichier.txt, car la période a été comparée à l'espace et de perdre.

Microsoft a ajouté une nouvelle règle à l'algorithme de tri dans Windows Vista afin que les périodes sont traités comme tri avant d'espaces au lieu d'après ces derniers. Si vous n'aimez pas cette sous-rcgle, vous pouvez le désactiver en définissant NoDotBreakInLogicalCompare, mais uniquement dans Windows Vista. Le paramètre n'a aucun effet sur Windows 7.

Il y a moins étrange, un autre cas dans lesquels le tri de caractère par caractère peut être préférable : Si vous avez des noms de fichiers avec des nombres à virgule flottante. L'algorithme de tri basé sur le numéro placeriez « 1,5 » à l'avance de « 1,25. » Cela est correct si la « 1,5 » et « 1,25 » font référence à une hiérarchie numérotée, telle qu'une section de code légaux. Titre 1, chapitre 5 apparaît avant le titre 1, chapitre 25.

En revanche, si « 1,5 » et « 1,25 » font référence aux dimensions d'une partie de la machine en centimètres, que vous pouvez attendre « 1,25 » précède « 1,5 ». Étant donné que l'Explorateur Windows n'a pas suffisamment de contexte de savoir si le nombre à virgule n'importe quelle chaîne de chiffres après la virgule décimale est un numéro hiérarchique ou flottante particulier, il a besoin de votre aide.

Une modification plus subtile d'algorithmes de tri a été introduite dans Windows 7. Un seul client observé que s'il occupait deux fichiers, appelées file1.txt et file2.txt, les fichiers apparaissaient dans l'ordre si il a trié le dossier par Type, qui est le comportement attendu.

S'il a cliqué sur l'en-tête de Type une deuxième fois pour inverser le tri, les versions antérieures de Windows continuerait à placer file1.txt file2.txt de. Toutefois, le fichier intervertit dans Windows 7, avec file2.txt provenant d'avance file1.txt. Le client a été confondu par ce changement de comportement dans la mesure où il était « déraisonnable ».

La colonne Type est conscient qu'il est courant pour le nombre d'éléments à avoir le même Type, afin qu'il indique que ties doivent être interrompues par nom de l'élément. En outre pour effectuer le tri par Type d'un peu plus cohérente, cela signifie également que lorsque vous inversez l'ordre de tri, les éléments au sein de chaque Type également inverser ordre. Il s'agit d'un comportement raisonnable pour de nombreux utilisateurs, car ils attendent qu'activation/désactivation d'une colonne inversera l'ensemble des éléments.

Par conséquent, la prochaine fois que vous exécutez un tri, n'oubliez pas que lors du tri des sons de façon simple et directe, est un lot passe dans les coulisses...

Raymond Chen’s

Raymond Chende Web site, l'ancien nouveau chose, et livre portant le même nom (Addison-Wesley, 2007) traitent des histoire de Windows, Win32 géant et programmation poulets métalliques.

Contenu associé