列表比較工具(提取共同行與差異行)
比較兩個文本列表(每行一項),通過集合運算自動提取兩者共有的行、僅A存在的行、僅B存在的行。適合郵件名單核對、庫存清單去重等場景。全部處理在瀏覽器內完成,輸入內容不會發送到伺服器。
什麼是列表比較工具
把兩份列表並排比對,找出「兩邊都有的」與「只有一邊有的」,用肉眼做一定會漏。本工具只需貼上兩段「一行一項」的文字,就會用集合運算自動分成共通行、僅A有的行、僅B有的行三組。適合比對電子郵件地址、核對庫存清單、確認名單差異等,不必先在試算表裡寫函數。
行的順序會被忽略。內容相同的行即使位置不同也算共通行,因此兩份列表不需要排序一致。前後空白會自動去除,空行會跳過,重複的行會合併為一項。是否區分大小寫可以切換;選擇不區分時,比對會忽略大小寫,而畫面上顯示的行仍保持你貼上時的寫法。所有處理都在瀏覽器內完成,貼上的內容不會被送出。
比較兩份列表的步驟
- 貼上列表A 以一行一項的形式輸入。可以直接把試算表的一欄複製貼上。
- 貼上列表B 以相同格式放入另一份列表。兩邊行數不同也沒有關係。
- 決定大小寫的處理方式 像電子郵件地址那樣想吸收寫法差異時,選擇不區分。像ID或商品代碼那樣需要嚴格比對時,保持區分。
- 閱讀三組結果 共通、僅A、僅B會同時顯示,各自都能複製,可直接交給下一個步驟。
用好本工具的小技巧
- 將郵件訂閱列表與退訂列表進行比較,可以一次性提取出應從下次傳送中排除的地址。
- 將庫存清單與採購訂單列表比較,能快速找出尚未下單的商品。
- 每一行都會自動去除首尾空白後再比較,因此複製貼上時混入的多餘空格不會影響結果。
- 即使同一行在輸入中出現多次,結果中也只會顯示一次去重後的行,方便整理雜亂的列表。
- 取消勾選"區分大小寫"後,可以將Example.com和example.com這類拼寫差異視為同一行處理。
這些場景下會用到
比對郵件發送名單
把已發送名單與全體名單相比,取出尚未發送的收件人。選擇不區分大小寫後,寫法不一致的地址會被視為同一人。
核對庫存與盤點結果
把帳面上的型號清單與實地清點的清單並排,一次找出帳上有而實物沒有的、以及反過來的項目。
找出退會者與新加入者
比較上月與本月的會員ID,僅A有的是退會者,僅B有的是新加入者。
比較設定檔的鍵名
列出正式環境與測試環境的環境變數名稱,找出只有一邊才有的鍵。想確認鍵是否存在而非其值時很合適。
列表比較的相關術語
- 共通行(交集)
- A與B雙方都出現的行,相當於數學上的交集。即使排列順序不同,只要內容相同就算共通行。
- 僅A有的行(差集)
- A有但B沒有的行,相當於A減去B的差集。
- 集合運算
- 不考慮重複與順序,只看「是否包含」來處理元素的思路。本工具忽略排列順序正是基於此。
- 與差異比對(diff)的不同
- 差異工具會保持行的排列,顯示何處被插入或刪除,因此僅僅調換順序也會被視為差異。本工具忽略順序,內容相同即視為共通行。請依目的選用。
- 大小寫的區分
- 選擇不區分時,僅在比對時統一轉為小寫。畫面上顯示的行保持輸入時的寫法,原本的大小寫不會遺失。
常見問題
閒話 ― 用"集合運算"比較列表的思路
求兩個列表的"差異"並非只有一種方法。像文本差異(Diff)工具那樣的逐行diff演算法,會在保持行順序的前提下尋找對應關係,因此適合追蹤原始碼或配置檔案的修改歷史。而對於郵箱地址、庫存編碼這類本身就不講究順序的列表,用數學中的集合運算(交集、差集)來思考會更加直觀。本工具採用的正是後一種思路。
在集合運算中,"交集(intersection)"指同時屬於兩個集合的元素,"差集(difference)"指只屬於其中一個集合的元素。本工具中的"共同行"對應交集(A∩B),"僅A存在的行"和"僅B存在的行"則分別對應差集(A−B、B−A)。雖然數學上是簡單的操作,但在實務中被廣泛用於客戶名單去重、篩選傳送物件等場景。
在實現上,本工具比較時使用JavaScript的Map物件,以標準化後的鍵(區分大小寫時保持原樣,不區分時轉換為小寫)為索引,記錄每個鍵首次出現時的原始寫法。這樣即使是數千行規模的列表也能快速完成比較,同時輸出的行仍能保留原始的大小寫寫法。