对列表进行排序听起来像是计算中最容易解决的问题,直到结果回来 file10 上面 file2,每个大写的名字都堆在上面, $5 stranded在价格表的底部,而"苹果"和"苹果"算作两个不同的条目,每一个都是按照它被告知的方式来做的排序,麻烦的是"按字母顺序"隐藏了几个不同的规则,挑错一个会产生一个在技术上排序,实际上毫无用处的列表。
本指南解释了日常列表中重要的排序规则:字节顺序、区域设置感知字母顺序、嵌入数字的自然顺序、真实数字顺序和长度顺序。它还涵盖了修剪和删除重复项等清洁步骤如何与排序相互作用。工作示例使用 Toolz 行分类器并且显示的每个输出都是其代码产生的。
TL;博士: Toolz Line Sorter 中按字母顺序排列文本的行排序,每行粘贴一项并选择一种模式,按字母顺序排列是区域设置感知的自然的,因此
item2之前item10,和忽略情况(默认情况下)保持"苹果"和"苹果"在一起。数字模式按每行开始时的数字排序,并将非数字行沉入底部。长度模式按字符计数排序。排序前运行清理:修剪空格,掉落空白行,然后删除重复项,保留第一次出现。 在线线路分拣机 是客户端,免费,无注册,并随您键入更新。
行排序器做什么?
Line sorter 取一块文字,把每一行当作一个项目,用选定的规则重新排列行,同一个工具通常同时清理列表:修剪杂散空格、去除空白行和去除重复项。
Toolz 版本提供五种模式和四种清洁选项:
| 设置 | 它做什么 | 默认 |
|---|---|---|
| A 到 Z | 具有自然数字处理的具有区域感知的字母顺序 | 选 |
| 数字 | 每行开头的数字顺序 | |
| 长度 | 按字符数排序,最短第一 | |
| 反向 | 翻转当前行顺序而不进行排序 | |
| 洗牌 | 随机顺序;再次单击以重新洗牌 | |
| 下降 | 将 A 的结果翻转为 Z、数字或长度 | 关闭 |
| 删除空行 | 删除空白或仅空白的行 | 论 |
| 删除重复项 | 保留每行的第一个出现 | 关闭 |
| 修剪空格 | 删除每行两端的空格和选项卡 | 关闭 |
| 忽略案例 | 将行作为小写来比较以进行排序和重复 | 论 |
输出面板显示出多少行以及有多少行被删除,因此您可以一目了然地看到清洁选项的效果。
为什么 file10 先于 file2?
因为纯文本排序一次比较一个字符的字符串,从左侧开始。 file10 並 file2 匹配四个字符,则第五个字符是 1 在一个和 2 在另一个。角色 1 之前排序过 2如此 file10 wins,而比较从来没有看过10是比2更大的数字这一事实。
Natural sorting 通过将每轮数字读作数字来修复此问题。Toolz 行排序器's A 到 Z 模式执行此操作,使用浏览器's 内置整理,打开数字比较,描述的选项为 MDN 上的字符串.原型.localeCompare.下面的排序规则来自于 Unicode 整理算法的,这就是浏览器决定"é"在"e"附近排序的方式,而不是在"z"之后排序。
这是三个规则下相同的五项列表:
| 输入 | 字节顺序 (LC_ALL=C sort) |
字符顺序,表壳折叠 | 自然顺序(工具 A 到 Z) |
|---|---|---|---|
item10 |
Item1 |
Item1 |
Item1 |
item2 |
item10 |
item10 |
item2 |
Item1 |
item2 |
item2 |
item3 |
item3 |
item3 |
item3 |
item10 |
zebra |
zebra |
zebra |
zebra |
字节顺序放置 Item1 首先只是因为大写 I 代码比任何小写字母都要低。带有大小写折叠的字符顺序固定大写,但仍然保留 item10 之前 item2.自然秩序两全其美。
Case如何影响字母排序?
Rair byte顺序,每个大写字母排序在每个小写字母之前,因此名称列表可以按字母顺序分为两个运行:所有大写的条目先进行,然后所有小写的Locale-aware排序则不这样做;它首先将字母视为同一个字母,仅使用大小写来打破联系。
Ignore case 选项更进一步,将所有内容都作为小写进行比较,当两行仅因大小写而异时,它们会以相等的方式进行比较,排序会按照它们在输入中出现的顺序保持重复,这很重要,下面将介绍。
使用内置示例的工作示例
击"加载样本"并且输入是十行: banana、 Apple、 cherry、 apple、 10、 2、 Banana、 date、空行,以及 grape。
| 设置 | 输出 | 显示计数 |
|---|---|---|
| 默认值:A 到 Z,忽略 case on,删除 on 上的空行 | 2, 10, Apple, apple, banana, Banana, cherry, date, grape |
9条线,移除1条 |
| 添加 删除重复项 | 2, 10, Apple, banana, cherry, date, grape |
7条线,移除3条 |
| 删除重复项,忽略大小写 | 2, 10, apple, Apple, banana, Banana, cherry, date, grape |
9条线,移除1条 |
| 默认值加上降序 | grape, date, cherry, Banana, banana, apple, Apple, 10, 2 |
9条线,移除1条 |
该表中可以看到三个细节。数字以字母顺序排列在字母之前,并且 2 先于 10 因为自然排序。随着忽略情况, Apple 保持领先 apple 因为它首先出现在输入中。在关闭 Ignore case 后,浏览器's 整理将小写形式放在大写形式的前面,这是英语浏览器中常见的行为,并且没有一行算作重复,因为它们不相同。下降是上升结果的完全反转,因此系线也会翻转。
按字母顺序与数字排序:您应该何时使用每个?
母(自然)模式,对于包含数字的文本,如文件名、版本标签或街道地址,当每行都是一个数字,或者以一开头,并且你想要按值排序的行时,使用数字模式。
数字模式按照 JavaScript's 的方式读取每行开头的数字 parseFloat does。tooks 跳过前导空格,读取一个可选符号、数字、小数点和一个指数,停在第一个不能继续数字的字符处,不以数字开头的行到底部,保持原来的顺序。
| 線 | 使用的价值 | 注 |
|---|---|---|
42 |
42绔 涔诲芥澶澧 | |
-7.5 |
-7.5 | 负值和十进制值起作用 |
1e3 |
1000 | 阅读科学符号 |
12 apples |
12绔 涔诲芥澶澧 | 数字被忽略后的文本 |
1,000 |
1 | 读取在逗号处停止 |
$5 |
不是数字 | 沉到底部 |
v2 |
不是数字 | 沉到底部 |
排序 $5、 42、 1,000、 -7.5、 12 apples、 1e3 在数字模式下给出:
-7.5
1,000
12 apples
42
1e3
$5
该输出中有两个陷阱。 1,000 1排序,因为数以千计的分隔符结束数字。先用 剥离它们 找到并替换 如果您的数据使用它们。和 $5 跌至谷底;在对价格进行排序之前删除货币符号。
数模降序反转整个结果,即非数列由下往上移动,若只想要数列降序,先将非数列清理干净。
按长度排序如何工作?
Length mode 按包含多少个字符来排序行,最短的在前,或者最长的在降序的在前,等长的行保持其输入顺序。
Count为JavaScript字符串长度, 计数UTF-16代码单位, 对于普通字母、数字和重音拉丁字符等于可见字符数: café is 4。表情符号和一些稀有字符大多使用两个代码单位,所以 ok👍 4算,而不是3。对于单词、名称或URL的列表,这很少很重要。
长度排序对于发现异常值非常方便:异常长的产品标题、截断的条目或列表中最短的关键字。
清洁和分类按什么顺序进行?
步总是按固定的顺序运行,顺序解释了最令人惊讶的结果:
- 分裂 输入行,接受 Unix 和 Windows 行结尾。
- 修剪 每行,如果 Trim 空格亮起。
- 删除空行,如果在。仅包含空格的行算作空白,即使有 Trim off。
- 删除重复项、如果开启。保留第一次出现。在忽略大小写的情况下,仅因大小写而异的行算作重复,第一个的大小写则存活下来。
- 排序、反转或洗牌 还剩下什么。
因为修剪是可选的,默认情况下是关闭的, apple 並 apple (带尾随空格)是比较重复时两条不同的线,除非你打开trim。那是最常见的原因a "删除重复"通过似乎错过了条目。从电子表格粘贴的选项卡会产生相同的效果。
对于较重的重复工作,例如保留最后一次出现或仅比较每行的一部分, 重复的除线器指南 更深入地涵盖选项。
反向与下降:有什么区别?
反向翻转行的当前顺序而不对任何内容进行排序。 c, a, b 变成 b, a, c.先降序后翻转,所以 c, a, b 在 A 到 Z 中,降序变为 c, b, a。
Reverse 当原始顺序表示某样东西时使用,例如最旧条目在前,并且您首先想要最新的日志文件 当您想要从 Z 到 A 或从大到小的排序列表时使用 Descending 在 Reverse 和 Shuffle 模式下禁用 Descending 按钮,因为它没有什么可翻转的。
洗牌够随机吗?
Shuffle使用费雪-耶茨算法,当它的随机数是均匀的时,它给每个可能的顺序一个相等的机会,它从浏览器中抽取这些数字's Math.random()。对阅读列表、播放列表或演示顺序进行随机化就可以了,它不是加密随机源,因此对于任何可能有人有理由预测或对结果提出异议的事情,例如抽奖,都是错误的选择,对于那些,专门的 列表随机化器 是更合身,再点击洗牌即可获得新订单。
在线对敏感列表进行排序安全吗?
有了这个工具,是的。排序和清理发生在客户端,在浏览器选项卡中的 JavaScript 中。文本不会上传或存储,并且一旦页面加载完毕,该工具就会与网络保持关闭状态。电子邮件地址、客户姓名或内部主机名的列表永远不会离开您的机器。
实用的大小限制是您的浏览器's内存而不是服务器帽,数万行在典型的笔记本电脑上立即排序,非常大的文件,在数百兆字节中,在命令行上处理得更好。
常见的行排序错误是什么?
| 症状 | 原因 | 修复 |
|---|---|---|
file10 上面 file2 在另一个工具中 |
简单的人物比较 | 使用自然排序(此处为 A 到 Z)或 sort -V |
| 大写条目全部位于顶部 | 字节顺序排序 | 使用区域设置感知排序或忽略情况 |
| 未删除重复项 | 尾随空格或选项卡不同 | 打开修剪空格 |
| "苹果"和"苹果"两者都保留了 | 忽略情况就结束了 | 打开忽略情况 |
1,000 1排序 |
千分隔符结束该数字 | 在数字排序之前删除逗号 |
价格与 $ 在底部 |
Line不是以数字开头的 | 首先剥离货币符号 |
| 数字列表的降序以单词开头 | 非数字线反转至顶部 | 首先删除非数字行 |
| 输出还有一个"已删除"比预期的要多 | 尾随换行符创建了空的最后一行 | 预期;空行被掉落 |
在线线路分拣机的替代方案
| 工具 | 如何排序 | 注释 |
|---|---|---|
GNU sort |
sort -f (折叠式机箱), sort -n (数字), sort -V (自然的), sort -u (独一无二), sort -r (反向的) |
可编写脚本,处理庞大的文件;看到 GNU排序手册 |
shuf |
shuf list.txt |
命令行上的随机顺序 |
| 按壳中的长度排序 | awk '{ print length, $0 }' list.txt | sort -n | cut -d' ' -f2- |
根据区域设置计算字节或字符 |
| 电子表格 | 粘贴到列中,数据,排序 | 当行有多个字段时就很好 |
| 代码编辑器 | "排序行"许多编辑器中的命令 | 行为因编辑而异 |
| Toolz 行分类器 | 粘贴,单击模式 | 实时预览,一次性清洁,客户端 |
注意 sort 输出取决于 LC_ALL 或 LANG locale 设置,这就是为什么同一个命令可以在两台机器上给出不同的命令。设置 LC_ALL=C 强制字节顺序。
逐步对列表进行排序
- 打开 文本行分类器 并粘贴您的列表,每行一项。
- 选择 A 到 Z 表示单词和文件名,选择数字表示数字,选择长度表示字符计数。
- 如果列表是从文档或电子表格粘贴的,请打开修剪空白。
- 如果您想每次输入一次,请打开删除重复项;留下"忽略情况"以合并不同的大写字母。
- 检查输出计数和"已删除"数字。
- 击复制。
如果列表还需要将其大写标准化,则 案例转换器指南 解释标题、句子和其他情况,以及 文本工具中心 将文本实用程序的其余部分收集到一个地方。



