文字行排序
把任何清單排好順序:依字母正序或倒序、自然順序、每行的第一個數字、長度,或隨機打亂。排序採用瀏覽器本身的語言規則,完全在你的裝置上執行。
0 個字元 · 0 個字詞 · 0 行
0 個字元 · 0 個字詞 · 0 行
完全在此瀏覽器分頁中執行,您的文字不會被上傳或儲存。
功能說明
行排序 以瀏覽器的語系排序規則依字母順序排列各行,也可用自然排序(file2 在 file10 之前)、依每行第一個數字、依長度,或隨機打亂。
item 10 item 9 Item 1
Item 1 item 9 item 10
字母排序和字元碼排序不一樣
電腦排序文字最簡單的方式是依字元碼比較,但結果常常很怪:所有大寫字母(ASCII 碼 65 到 90)都排在所有小寫字母(97 到 122)之前,所以「Zebra」會排在「apple」前面,帶重音符號的字母則會排到 z 之後。一般人期待的是字典順序,語言學上稱為排序規則(collation)。本工具使用 Intl.Collator,也就是瀏覽器對 Unicode 排序演算法(Unicode Collation Algorithm)的實作,因此「apple」、「Banana」和「éclair」的排列順序會符合讀者的預期。
排序規則也會因語言而異。德文字典把 ä 歸在 a 一起,瑞典文則把 å、ä、ö 放在 z 之後,也就是字母表的最末端。本工具使用瀏覽器的預設地區設定,因此在瑞典文系統上排序的清單會遵循瑞典文規則。開啟忽略大小寫後,僅大小寫或重音不同的字母會視為相同,並依下一個差異來決定順序。
自然順序、數字順序與長度順序
字母順序是逐一比較數字,所以「file10」會排在「file2」前面,因為 1 比 2 小。自然排序則把連續的數字當成完整的數值,結果會是 file1、file2、file10,就像 Windows 檔案總管和 macOS Finder 顯示檔名的方式。適用於章節標題、版本清單、發票號碼,以及 IMG_9、IMG_10 這類照片檔名。
數值排序會找出每一行中的第一個數字(包含負號與小數),並依其數值大小排序,適合價目表、分數,以及「12 apples」這類文字行。不含數字的行會排到最後。長度排序依可見字元的數量由短到長排列,長度相同時再依字母順序排列;適合用來找出最短的網域名稱,或找出被截斷的項目。
隨機打亂的運作方式
隨機排列使用 Fisher–Yates 演算法(由 Ronald Fisher 與 Frank Yates 於 1938 年發表,1964 年由 Richard Durstenfeld 改寫為適合電腦執行的版本)。它從清單末端往前走訪,把每一行與位於它本身或之前的隨機一行互換。只要亂數來源夠好,每種排列出現的機率都相同。亂數由 mulberry32 產生,這是一種小型的帶種子偽隨機產生器,因此在你要求重新排列之前,結果會保持不變。由於它的狀態只有 32 位元,最多只能產生約 43 億種不同的排列,比僅 13 行的 62 億種排列還少。用在測驗題目、播放清單或決定簡報順序都沒問題,但不適合抽獎,也不適合牽涉金錢或安全的用途。
若想在排序前先整理清單,請先使用移除重複行。
常見問題
- 為什麼 file10 會排在 file2 前面?
- 單純的字母順序是逐字元比較,1 會排在 2 前面。請選擇自然排序,它會把連續的數字視為一個數值,這樣 file2 就會排在 file10 前面。
- 排序時大寫字會排在前面嗎?
- 不會。排序採用支援語言的排序規則,所以 apple 與 Apple 會排在一起。只有單純依字元碼排序時,才會把所有大寫字母排在所有小寫字母之前。
- 隨機打亂真的是隨機的嗎?
- 它使用無偏差的 Fisher–Yates 隨機排列,並由快速的帶種子偽隨機產生器驅動。日常使用已足夠公平,但不適合用於抽籤、彩券或安全用途。
- 依數字排序時,沒有數字的行會排在哪裡?
- 會排到清單最後,彼此之間依字母順序排列。含有數字的行,則依該行找到的第一個數字的數值排序。
- 可以依字母倒序排列文字行嗎?
- 可以,選擇 Z→A 即可。它使用與 A→Z 相同的語言感知比較方式,只是順序相反,因此帶重音或大寫的字詞仍會落在合理的位置。