文本排序
按字母、按数字、按长度排序,或者随机打乱。ё、ä和ñ会排在它们该在的位置,而不是挤到末尾。
把文件拖到这里
.txt, .md, .csv · 最大5 MB
如何排序
- 1
粘贴列表
每行一项。也可以拖入不超过5 MB的.txt或.csv文件。
- 2
选择排序方式
六种排序方式,可升序或降序。改动任何选项,结果都会随之更新。
- 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。
排序会改动行本身吗?
不会。去除首尾空格和忽略大小写的选项只影响比较;输出的行和输入时完全一样。