fixmint
ZH

为什么排序时 10 会排在 2 前面?自然排序如何解决

作者: · · 更新于 2026年11月8日 · 阅读约 4 分钟

普通的字母排序会逐个比较每一项的第一个字符,再比较第二个,依此类推。“10”的第一个字符是 1,而 1 排在 2 之前,所以“10”会排在“2”前面。这种顺序对文字是正确的,对数字却是错的。自然排序会把每一段连续的数字当作一个完整的数来读,因此 2 会排在 10 前面。把数字补零,比如 02 和 10,则能从文件名本身解决同样的问题。

按行排序列表顺序不对免费使用

计算机为什么这样排序

普通排序从左到右,每次只比较一个位置上的文字,依据字符编码或语言的排序规则,遇到第一个不同之处就停止。这对文字很合适:“apple”排在“banana”前面,是因为首字母不同。

对数字就不行了。以三个文件名为例:file-2、file-9 和 file-10。比较最后两个时,会比到第 6 个位置,此处字符分别是 1 和 9。1 更小,所以 file-10 排在前面。普通排序的结果是 file-10、file-2、file-9。这对字母是正确的,但对需要按数量理解的人来说就是错的。

自然排序

自然排序也叫数字排序或人类排序,它把每段文字拆分成连续的数字和其他字符。数字段按数值比较,其他部分按文字比较。因此 2 排在 10 前面,file-2 排在 file-10 前面。许多文件管理器默认使用这类排序,所以一个放着编号照片的文件夹,在它们里面通常看起来是对的。

在 fixmint 中给列表排序

  1. 把列表粘贴到文本行排序工具中,每行一项。
  2. 在“排序方式”下,选择“数字”,而不是 A→Z。
普通 A→Z数字
item1, item10, item2item1, item2, item10

“数字”排序会把数字当作完整的数来读。删除重复行也提供同样的数字排序。它会先删除重复项,再排序,因此输出的结果既不重复,又按数值顺序排列。

补零:另一种解决方法

自己给文件命名时,让每个数字的位数相同:01、02,一直到 10,或者 001 到 100。这样,普通排序在任何地方都能得到正确顺序,包括没有自然排序功能的程序。补零还能让列表离开你的电脑后顺序依然正确,因为文件名本身已经带有顺序。

补零有效,是因为位数相同时,逐字符比较的结果与数值顺序一致。位数必须够用,能容纳最大的数。三位数的方案最多到 999,所以名为 1000 的文件会排在 100 和 101 之间,顺序就乱了。列表增长到超出位数时,就把所有数字补到更宽的位数。

新文件就这样命名,已有文件则可以在批量重命名时加上零。

普通排序会出现在哪里

编号的文件名随处可见:导出的照片 IMG_1 到 IMG_120、名为 Chapter 1 到 Chapter 30 的章节、曲目列表、发票编号和软件版本号。由于位置由第一个数字决定,普通排序之后,这些都可能显得不对。Chapter 10 会排在 Chapter 1 旁边,而 Chapter 2 会排到末尾附近。

带字母的标签也一样。在自然排序下,Part 2a、Part 2b 和 Part 10 会按此顺序排列:数字先按数值比较,字母只在数字相同时才起区分作用。普通排序会把 Part 10 排在 Part 2a 前面。

日期需要注意。在自然排序中,日在前的日期如 4/11/2026 和 12/01/2026 会先比较日,所以 4/11 排在 12/01 前面,尽管 1 月 12 日在一年中更早。年在前的日期,如 2026-11-04,按纯文本排序也能正确排列,因此列表需要按日期排序时,请使用这种格式。

排序后检查结果

检查边界处,这里是普通排序最常出错的地方:从 9 到 10,以及从 99 到 100 的变化。在数字排序中,这些位置的顺序是正确的。如果列表中既有补零的数字又有没补零的数字,先看这些位置,因为混用的问题会在那里暴露出来。

有目的地选择排序方式

文字、名字和标题用 A 到 Z,因为字母承载着含义。列表项以数量、页码、章节或版本号开头时,用数字排序。想让最短的项排在前面时,用长度排序。随机排序用于随机打乱顺序,每次按下都会得到不同的结果。关于字母排序的规则,参见如何给列表按字母排序。

特殊情况

  • 混合行。 自然排序会从左到右比较整行。如果一行以名字开头,名字会先决定顺序,因此“Bob 1”会排在“Ada 10”后面,尽管 1 比 10 小。
  • 位数混用。 同一列表中既有补零的数字又有没补零的数字,在自然排序中可能被视为相等,因此它们的顺序取决于输入顺序。每个列表请统一位数。
  • 小数。 自然排序把 1.9 读作 1 和 9,把 1.10 读作 1 和 10,所以 1.9 排在前面。这对版本号合适,因为 1.10 是更晚的发布版本。对于价格等小数值,1.10 实际上小于 1.9,所以自然顺序是错的。请把小数补齐到相同位数:1.10 和 1.90。
  • 大小写。 排序默认把 Apple 和 apple 视为相同,因此它们会按粘贴时的顺序排在一起。区分大小写的排序会改变这一点。

由 AI 辅助翻译自英文原文。

评论

    还没有评论。快来抢沙发。

    你的评分(可选)

    你的邮箱不会被显示或保存。

    How to Remain Valuable When Intelligence Becomes Cheap 的封面How to Remain Valuable When Intelligence Becomes Cheap

    224页,探讨当AI能完成大部分认知工作时,哪些人类、经济和战略上的优势依然稀缺。

    $3.84在 Gumroad 获取英文阅读