UltKit

文本行排序

把任意列表排好顺序:按字母正序或倒序、按自然顺序、按每行的第一个数字、按长度,或随机打乱。排序使用浏览器自带的语言规则,完全在您的设备上运行。

顺序

0 个字符 · 0 个词 · 0 行

0 个字符 · 0 个词 · 0 行

完全在当前浏览器标签页中运行,您的文本不会被上传或保存。

功能说明

行排序 按浏览器的本地化排序规则按字母顺序排列各行,也可按自然顺序(file2 排在 file10 前)、按每行第一个数字、按长度或随机打乱。

处理前
item 10
item 9
Item 1
处理后
Item 1
item 9
item 10

字母顺序不等于字符编码顺序

计算机对文本排序最简单的办法是按字符编码,但结果常常很奇怪:所有大写字母(ASCII 编码 65 到 90)都排在所有小写字母(97 到 122)之前,所以 "Zebra" 会排在 "apple" 前面,带重音的字母则排到 z 之后。人们期望的是字典顺序,语言学上称为排序规则(collation)。本工具使用 Intl.Collator,即浏览器对 Unicode 排序算法(Unicode Collation Algorithm)的实现,因此 "apple"、"Banana" 和 "éclair" 会按读者预期的方式排列。

排序规则也取决于语言。德语词典把 ä 归在 a 下,而瑞典语把 å、ä、ö 放在 z 之后,即字母表的最末尾。本工具使用浏览器的默认语言环境,因此在瑞典语系统上排序的列表会遵循瑞典语规则。开启忽略大小写后,仅大小写或重音不同的字母会被视为相同,并按下一处差异排序。

自然顺序、数字顺序和长度顺序

字母顺序是逐个比较数字的,所以 "file10" 会排在 "file2" 之前,因为 1 小于 2。自然排序会把连续的数字当作完整的数值,得到 file1、file2、file10,与 Windows 资源管理器和 macOS 访达等文件管理器显示文件名的方式一致。适用于章节标题、版本列表、发票编号,以及 IMG_9 和 IMG_10 这类照片文件名。

数值排序会查找每行中的第一个数字(包括负号和小数),并按其数值排序,适合价格表、分数以及 "12 apples" 这样的行。不含数字的行会排到最后。长度排序按可见字符的数量从短到长排列,长度相同时按字母顺序;适合找出最短的域名,或发现被截断的条目。

随机打乱的原理

随机打乱使用 Fisher–Yates 算法(由 Ronald Fisher 和 Frank Yates 于 1938 年发表,Richard Durstenfeld 于 1964 年改编为适合计算机的版本),从列表末尾向前遍历,把每一行与其本身或之前随机选中的一行交换。只要随机源良好,每种排列的概率都相同。随机数来自 mulberry32,这是一个带种子的小型伪随机数生成器,因此在你要求重新打乱之前,结果保持不变。由于其状态只有 32 位,最多只能产生约 43 亿种不同的打乱结果,还不到仅 13 行的 62 亿种排列。用于测验题目、播放列表和确定演示顺序没有问题,但不适合抽奖,也不适合涉及金钱或安全的场景。

如果想在排序前清理列表,请先用删除重复行处理。

常见问题

为什么 file10 会排在 file2 前面?
普通字母顺序是逐字符比较的,1 排在 2 之前。选择自然排序,它会把每段连续数字当作一个数值,这样 file2 就会排在 file10 之前。
排序时大写单词会排在前面吗?
不会。排序采用识别语言的排序规则,所以 apple 和 Apple 会相邻。只有简单的字符编码排序才会把所有大写字母排在所有小写字母之前。
随机打乱是真正随机的吗?
它使用无偏的 Fisher–Yates 洗牌算法,由一个带种子的快速伪随机数生成器驱动。日常使用足够公平,但不适合抽签、抽奖或安全场景。
按数字排序时,没有数字的行排在哪里?
排到列表末尾,彼此之间按字母顺序排列。含有数字的行则按该行找到的第一个数字的数值排序。
可以按字母倒序排列文本行吗?
可以,选择 Z→A 即可。它使用与 A→Z 相同的识别语言的比较方式,只是顺序相反,因此带重音和首字母大写的单词仍会处于合理的位置。