ToolBench

文本

文本行排序

把一列名字、价格、版本号或编号放进来,立刻排好。数字模式会从每行里取出数字来比较,所以 v1.9 会排在 v1.10 前面。

怎么用

  1. 把要排序的行粘贴进来。
  2. 选择方式:A→Z、Z→A、数字、按长度或反转。
  3. 勾选「忽略大小写」可让 Apple 与 apple 一起排序。
  4. 需要合并重复行就勾选「去除重复」。

字母序是跟语言走的

按字符编码直接排序,会把所有大写排在小写前面,把带重音的字符全排到 Z 后面。真正的字母序是按语言定义的:瑞典语把 Å、Ä、Ö 放在字母表末尾,德语电话簿序把 ö 当作 oe,西班牙语历史上把 ch 和 ll 当成独立字母。区域感知的比较能处理这些,而朴素比较会安静地产出一份「看着像排好了、其实是错的」清单。

自然排序,处理文本里的数字

纯字符串比较会把「file10」排在「file9」前面,因为字符 1 在 9 之前。自然排序把连续数字当数值比,得到 file9、file10、file11——这才是人的预期。凡是带版本号、章节号、导出文件名的场景都需要它,这也是这里的数字模式要从每行里取出数字来比较的原因。

排序配置文件而不把它弄坏

配置文件和更新日志不是平铺的列表:一个小节标题必须跟着它下面的行。整份文件按字母排序,会把每个标题从它的内容上撕下来。正确做法是逐块排:把一块拿出来,排好,再粘回去。

另一个坑是大小写。区分大小写排序会把所有大写开头的条目排到小写前面,于是 Zebra 跑到 apple 之前。几乎没人想要这个效果——凡是给人看的列表,不区分大小写才是正确默认;只有在编译器在意大小写的标识符场景才需要区分。

常见问题

数字排序怎么处理版本号?

它会取出每行里第一个数字来比较,所以「v1.9」会排在「v1.10」之前——按纯文本排序则会反过来。

数字模式下没有数字的行怎么办?

会被放到末尾,而不是当成 0,这样表头和空行就不会插在中间。

排序稳定吗?

比较结果相同的行会保持原来的相对顺序,重复排序的结果是可预期的。

能只排 CSV 的某一列吗?

这个工具按整行排序。如果需要按列处理,请用 CSV 转 JSON 工具。

排序会顺便去重吗?

不会。排序只改顺序;需要两者就按顺序执行两次。

为什么数字被当成文本来排?

因为字符串比较是逐字符进行的。打开数字模式,它会先把每行的数字取出来再比较。