跳到主要内容
PulsarKit

文本排序

按字母、按数字、按长度排序,或者随机打乱。ё、ä和ñ会排在它们该在的位置,而不是挤到末尾。

把文件拖到这里

.txt, .md, .csv · 最大5 MB

如何排序

  1. 1

    粘贴列表

    每行一项。也可以拖入不超过5 MB的.txt或.csv文件。

  2. 2

    选择排序方式

    六种排序方式,可升序或降序。改动任何选项,结果都会随之更新。

  3. 3

    复制或下载

    点一下复制到剪贴板,再点一下保存为.txt文件。

为什么ё和ä在别处会排错位置

逐个字符比较字符串,实际上是按Unicode码位排序。码位顺序在任何语言里都不是字母顺序,英语也不例外:它把所有大写字母排在所有小写字母前面,所以Zebra会排在apple前面。在俄语里,ё离е很远,最后落到列表末尾。在德语里,ä排在z后面。这个页面使用浏览器内置的排序规则(collator),并按你的界面语言工作。它知道真正的字母表,所以ё紧挨着е,ä紧挨着a,正好在查找它的人预期的位置。

item2排在item10前面

按字母排序会把item10排在item2前面,因为1在2前面,而逐字符比较只能看到这一点。自然排序把连续的数字当作数值来读,所以item2、item10和item100会按这个顺序出现。凡是名称里带数字的内容,比如文件名、版本号和章节标题,都适合用自然排序。只有当你确实需要按字符排序时,它才是错误的选择。

按某一列排序

设置列号并选择分隔符后,排序依据就变成这一列的字段,而不是整行。但结果里输出的仍然是完整的行,内容不变。这个区别很重要:如果一个工具按第三列排序后只把第三列还给你,其余数据就在不知不觉中丢掉了。没有这一列的行会得到一个空的排序依据,集中排在开头,而不是被删掉。

随机打乱不是Math.random

这里的随机打乱用Fisher-Yates算法完成一遍,随机数来自浏览器的密码学随机源。只是给列表换个顺序,听起来有些小题大做。但这正是真正均匀的打乱和有明显偏差的打乱之间的区别:在几万行的列表里,简单粗暴的打乱方法会让某些项比随机情况下更靠近顶部。

相同的行保持原有顺序

JavaScript的排序要求是稳定的,也就是说,排序依据相同的两行会保持输入时的先后顺序。正因为如此,先按一列排序再按另一列排序,效果就是两级排序。这也是这里的降序要在排序后整体反转得到,而不是反转比较规则的原因:反转能以镜像的形式保留这个特性。

列表不会离开你的设备

排序在你输入时直接在浏览器中完成。没有上传,无需账号,也没有日志,关闭标签页内容就清除了。

常见问题

带重音的字母能排对吗?

能。排序使用你的语言真正的字母表,而不是字符编码,所以ё、ä和ñ会排在它们所属的字母旁边。

怎么让item2排在item10前面?

选择把数字当作数值来读的选项。普通的字母排序做不到。

能按CSV的第二列排序吗?

能。设置列号和分隔符即可。输出的仍是完整的行,变的只是排序依据。

会删除重复的行吗?

只有你要求时才会。有一个开关负责这件事;如果去重是主要任务,还有专门的工具。

列表会上传吗?

不会。它始终留在浏览器标签页里。

最多能处理多少行?

最多200 000行,文件不超过5 MB。

排序会改动行本身吗?

不会。去除首尾空格和忽略大小写的选项只影响比较;输出的行和输入时完全一样。

相关工具