怎么用
- 粘贴列表,每行一项:姓名、邮箱、商品编码、文件名、关键词都可以。
- 选择排序方式和重复行的处理方式。「去掉首尾空格」和「删除空行」默认开启,因为从别处复制来的列表常常带着这两样东西。
- 点执行,结果显示在右边,并给出保留和删除的行数;之后再改选项,会立即重新计算。
- 复制结果,或者点把结果作为输入再处理一遍。
排序的规则
中文按拼音排
如果直接按字符编码排序,中文的顺序是 Unicode 里汉字的编码顺序,和读音毫无关系;英文的所有大写字母会排在所有小写字母前面,带重音的字母会被甩到最后。本工具用浏览器的 Intl.Collator 比较每一行,它实现了 Unicode 排序算法,并遵循页面语言的习惯:中文按拼音排序,也就是《现代汉语词典》等大多数现代辞书使用的顺序;英文先比字母,再比重音,最后比大小写。所以「李四」会排在「王五」前面,「王五」排在「张三」前面。
多音字按最常用的读音排,同音字之间的先后由排序规则内部决定,和词典里的顺序不一定完全一致。姓氏里的多音字(比如单、曾)可能需要手动调整。
自然顺序
普通的字母顺序把数字当作字符一位一位比较,所以 file10 会排在 file2 前面,因为 1 小于 2。自然顺序会把连续的数字当作一个数来比较,得到 file1、file2、file10,这才是人们对编号文件、章节、版本号期望的顺序。「第2章」「第10章」这样的中文标题同样适用。
去重
去重时保留第一次出现的那一行,所以在不排序的情况下,剩下的行仍然保持原来的先后顺序。「不区分英文大小写」会把 Apple 和 apple 当作同一行,保留先出现的那个。去重在去掉首尾空格之后进行,所以勾选了去空格时,「苹果」和「苹果 」(末尾多一个空格)也会被识别为重复。
随机打乱
打乱使用 Fisher–Yates 算法,随机数来自浏览器的密码学随机数生成器,每一种排列出现的概率完全相同。它和「随机抽签」工具用的是同一套方法,那个工具还能抽人和分组。
示例
| 输入(每行一项) | 设置 | 结果 |
|---|---|---|
| 张三、李四、王五 | 升序 | 李四、王五、张三 |
| file10、file2、file1 | 升序 | file1、file10、file2 |
| file10、file2、file1 | 自然顺序 | file1、file2、file10 |
| ccc、a、bb | 按长度 | a、bb、ccc |
| Apple、apple、Banana、apple | 删除(不区分大小写) | Apple、Banana(删除 2 行) |
| Apple、apple、Apple | 删除完全相同的行 | Apple、apple(删除 1 行) |
整理报名名单:把两个渠道导出的名单粘在一起,选「升序」和「删除完全相同的行」,重复报名的人就只剩一条,名单也按拼音排好了。
整理关键词:从几个文档里收集来的关键词,去掉首尾空格、删掉空行和重复项之后,再按长度排序,很容易看出哪些是长尾词。
局限
- 每行一项。 同一行里用逗号或制表符分隔的多个值会被当作一项;处理表格请用 CSV 相关工具。
- 相似不等于相同。 「北京市」和「北京」、同一个人名的两种写法,都算不同的行;只有完全相同的行(可选择不区分英文大小写)才会被删除。
- 多音字与混合文字。 多音字的读音、中英文混排时不同文字之间的先后,按 Unicode 默认规则处理,不一定是你想要的顺序。
- 带千分位的数字。 自然顺序会把 1,000 读成 1 和 000 两个数。需要按数值排序时,请先去掉千分位逗号。
常见问题
怎么删除重复行?
粘贴列表后,选「删除完全相同的行」;如果 Apple 和 apple 应该算同一项,就选「不区分英文大小写」。每一行保留第一次出现的那个。
中文能按拼音排序吗?
能。在中文页面上,中文行按拼音顺序排列。
为什么 file10 排在 file2 前面?
字母顺序是一位一位比较的,1 小于 2。选「自然顺序」就会按数字大小比较。
随机打乱公平吗?
公平。它使用 Fisher–Yates 洗牌算法和密码学安全的随机数,每一种顺序出现的概率都相同。
我的列表会被上传吗?
不会。排序和去重都在你的浏览器里完成。