列表比较工具(提取共同行与差异行)
比较两个文本列表(每行一项),通过集合运算自动提取两者共有的行、仅A存在的行、仅B存在的行。适合邮件名单核对、库存清单去重等场景。全部处理在浏览器内完成,输入内容不会发送到服务器。
使用提示
- 将邮件订阅列表与退订列表进行比较,可以一次性提取出应从下次发送中排除的地址。
- 将库存清单与采购订单列表比较,能快速找出尚未下单的商品。
- 每一行都会自动去除首尾空白后再比较,因此复制粘贴时混入的多余空格不会影响结果。
- 即使同一行在输入中出现多次,结果中也只会显示一次去重后的行,方便整理杂乱的列表。
- 取消勾选"区分大小写"后,可以将Example.com和example.com这类拼写差异视为同一行处理。
常见问题
Diff比较工具会保持行的原有顺序逐行对齐两份文本,检测出新增或删除的行。本工具则忽略顺序,将两个列表视为集合,提取共同行以及各自独有的行。如果同一行内容出现在不同的位置,Diff比较工具会将其判定为差异,而本工具会将其视为共同行。
即使同一行内容在输入中出现多次,比较结果中也只会作为去重后的唯一行显示一次。本工具不支持按出现次数进行比较。
默认情况下会区分大小写进行比较。取消勾选"区分大小写"后,可以将Example和example这类拼写差异视为同一行。
每行首尾的空白会被自动去除,去除后内容变为空的行(空行)会被排除在比较范围之外。粘贴列表时无需担心其中混有空行。
不会。比较处理完全在浏览器内的JavaScript中完成,输入的列表内容不会被发送到服务器。即使是包含邮箱地址等个人信息的列表,也可以放心使用。
闲话 ― 用"集合运算"比较列表的思路
求两个列表的"差异"并非只有一种方法。像文本差异(Diff)工具那样的逐行diff算法,会在保持行顺序的前提下寻找对应关系,因此适合追踪源代码或配置文件的修改历史。而对于邮箱地址、库存编码这类本身就不讲究顺序的列表,用数学中的集合运算(交集、差集)来思考会更加直观。本工具采用的正是后一种思路。
在集合运算中,"交集(intersection)"指同时属于两个集合的元素,"差集(difference)"指只属于其中一个集合的元素。本工具中的"共同行"对应交集(A∩B),"仅A存在的行"和"仅B存在的行"则分别对应差集(A−B、B−A)。虽然数学上是简单的操作,但在实务中被广泛用于客户名单去重、筛选发送对象等场景。
在实现上,本工具比较时使用JavaScript的Map对象,以标准化后的键(区分大小写时保持原样,不区分时转换为小写)为索引,记录每个键首次出现时的原始写法。这样即使是数千行规模的列表也能快速完成比较,同时输出的行仍能保留原始的大小写写法。