单词怎么按字母排序?大小写、数字与重音的排序规则
抽认卡打乱了、关键词列表要按字母排、想看看有没有近似重复的词,把词粘进来排一次就能看清。但排序有一套固定规则,不了解就容易觉得结果「不对」。
什么时候需要把词排好序
做索引、术语表、词汇表时,字母顺序是基本要求;手工排几十个词,越到后面越容易漏,改一次顺序又要重排一遍。抽认卡或单词表被打乱之后,也常想快速恢复成字典序,方便对照课本检查。
还有一种用法是查近似重复:把单词排好序,拼写相近的词会紧挨在一起,一眼就能看出 color 和 colour、organise 和 organize 这类变体,也方便判断两份词表里有哪些条目其实指的是同一个东西。
- 给关键词、术语表按字母排序
- 把打乱的单词表恢复成字典序
- 查找拼写相近的重复项
- 为索引准备字母顺序的条目
排序规则是怎么定的
工具按空白切分单词,用默认的字符串比较排序,也就是逐个字符比较编码值。英文字母里大写字母的编码都小于小写字母,所以 Apple 排在 apple 前面,所有大写开头的词都会集中在小写词之前。
数字按字符比较而不是按数值,10 会排在 9 前面,因为字符 1 小于 9。带重音的字母编码更高,é 会排在 z 之后;中文按编码排,顺序和拼音无关。结果用单个空格连成一行,重复的词不会被去掉。
- 区分大小写,大写字母整体排在小写之前
- 数字按字符比较:10 在 9 之前
- é 这类带重音的字母排在 z 之后
- 重复的词不会去掉,出现几次就排几次
- 结果合成一行,用单个空格连接
它做不到的,以及该换什么
它不是自然排序:不会把 2 排在 10 前面,也不会把 é 当作 e 处理。需要忽略大小写、按语言习惯排序时,它给不出想要的结果。中文的拼音序、日文的假名序同样不支持,只能得到编码顺序。
需要保留分行时,用按行排序的工具,那个会一行一行排;需要忽略大小写,用忽略大小写的行排序。命令行里 sort 默认受语言环境影响,sort -f 忽略大小写,sort -V 适合版本号,按场景选择更稳妥。
- 不做自然排序,数字按字符比较
- 不按语言习惯排序(拼音、假名都不支持)
- 要保留分行:用按行排序
- 要忽略大小写:用忽略大小写的行排序
常见问题
为什么大写字母排在小写前面?
因为排序按字符编码比较,大写字母的编码值小于小写字母,所以 Apple 会排在 apple 前面。想去掉这个影响,先把整段转成小写再排序,或者用忽略大小写的行排序工具。
为什么 10 排在 9 前面?
数字也是按字符逐个比较的,先比第一位,1 小于 9,所以 10 排在 9 前面。要按数值排序,先把数字补成相同位数,例如 09 和 10,或者用支持数值排序的工具。
原来的换行去哪了?
排序按空格和换行切分单词,输出时统一用单个空格连接,所以多行会变成一行。需要保留分行结构时,改用按行排序,那个工具不会改变行数。
相关工具:单词排序