Windows 机密: 进行排序的演变

Windows 资源管理器中排序算法的发展有比较长的历史而且略微有些曲折。

Raymond Chen

Windows 资源管理器开始时使用的一种非常简单的排序算法。 只需对其排序文件根据为"lstrcmpi"函数的名称。 这执行特定于区域设置的、 不区分大小写的比较。 提醒您,即使此比较函数时起来相当复杂。 例如,它给予特殊处理连字符和撇号。

因此,Windows 95 排序文件以便在 Windows 资源管理器中显示的名称,它会使超前于 file20 的 file139。 这是从计算机程序员的角度来看完全合理的。 它也是以正常的人类完全与直觉相反--从而证明计算机程序员不普通的人类。

在 Windows XP 中,Microsoft 更新的 Windows 资源管理器排序算法,使其更加符合正常人类的期望。 它作为数字而不是序列的字符处理文件名称中的位数。 虽然这改进了对大多数人进行排序,则没有此更改导致一些意外的位置的情况。

再次频繁出现的一个例子是文件名称中包含十六进制值。 在新的基于数字的排序,Windows 资源管理器假定一个名为"1040A"文件应略有"1040,"后进行排序,并问及文件命名为"103F2"。如果由于某种原因您习惯于查看完整的名称都是十六进制值的文件的文件夹,您可以设置的策略"将关闭在 Windows 资源管理器中的数字排序"。此策略更改排序后它已在版本的 Windows 之前到 Windows XP 的方式 — — 即逐字符。

句点和空格

在 Windows Vista 中,由于对比较算法中,所做的微小调整期间提供双税种。 它们是传统字符按天,但它们还作为文件扩展名标记夜景。 结果是,一个名为文件 1.txt 文件告终正在 counter-intuitively 排序: File.txt 后因为期间被比较的空间和丢失。

Microsoft 新规则添加到 Windows Vista 中的排序算法,因此期间被视为空格而不是之前排序后它们。 如果您不喜欢此子规则,您可以通过设置 NoDotBreakInLogicalCompare,但仅在 Windows Vista 中禁用它。 设置在 Windows 7 上不起作用。

另一台、 不太奇怪顺序逐个字符排序可能更可取的情况下: 如果您的浮点数,它们有的文件的名称。 基于数字的排序算法会使"1.5"早于"1.25"。这是代码的正确的如果"1.5"和"1.25"是代码的指一个编号层次结构,如法律段。 标题 1,第 5 章将位于标题 1,第 25 章之前。

另一方面,如果"1.5"和"1.25"是指以厘米为单位的机器零件的尺寸,然后所预期的一样"1.25"之前"1.5"。因为 Windows 资源管理器没有不足,无法知道它是否任何特定字符串的十进制的小数点后一个分层的数字或浮点数字点数,需要您的帮助上下文。

排序算法更细微的更改是在 Windows 7 中引入的。 一位客户观察到是否他有两个文件,标记的内容 (如 file1.txt 和 file2.txt,文件中出现这种顺序是否他排序的文件夹的类型,这是预期的行为。

如果他单击了类型标头进行反向排序,Windows 的早期版本的第二次将继续放置超前于 file2.txt 的 file1.txt。 但是,该文件随后超前于 file1.txt 的 file2.txt 与切换在 Windows 7 中的位置。 客户已困惑这种行为变化,因为它看起来"不合理"。

类型列理解很常见的具有相同的类型,因此它表示的项的名称应破坏扎的项目数。 除了使排序按类型有点更加一致,这还意味着在反转排序顺序时,每种类型内的项目就还逆页序。 这是合理的行为,对于许多用户来说,因为他们期望切换列将反转的项目集。

因此在下次运行对进行排序,请记住同时排序简单明了的声音,还有许多在幕后举行。..

Raymond Chen’s

雷陳 Web 站点,新旧的事情,并且具有相同标题为简介册 (艾迪逊-Wesley,2007年) 与 Windows 历史记录,Win32 编程和巨人金属 chickens。

相关内容