對清單進行排序聽起來像是計算中解決最多的問題,直到結果出來 file10 上面 file2,每個大寫的名字都集中在頂部, $5 滯留在價目表底部,並且"蘋果&報價;和&報價;蘋果&報價;算作兩個不同的條目。每一個都是完全按照指示進行的類型。問題是"按字母順序排列;隱藏了幾種不同的規則,選擇錯誤的規則會產生一個技術上已排序且實際上無用的清單。
本指南解釋了日常清單的重要排序規則:位元組順序、區域設定感知字母順序、嵌入數字的自然順序、真實數字順序和長度順序。它還涵蓋了修剪和刪除重複項等清潔步驟如何與排序相互作用。工作範例使用 Toolz 線分類機,顯示的每個輸出都是其程式碼產生的。
TL;DR: 若要對文字行進行排序,請每行貼上一項並選擇一種模式。 Toolz 行排序器中按字母順序排列是區域設定感知且自然的
item2來之前item10,忽略大小寫(預設為開啟)保留 "蘋果&報價;和&報價;蘋果&報價;一起。數字模式按每行開頭的數字排序,並將非數字行沉入底部。長度模式按字元數排序。排序前進行清理:修剪空白,刪除空白行,然後刪除保留第一次出現的重複項。這 線上線路分類器 客戶端免費,無需註冊,並可在您輸入時更新。
行排序器做什麼?
行排序器取得一個文字區塊,將每一行視為一個項目,然後根據選定的規則重新排列行。相同的工具通常會同時清理清單:修剪雜散空格、刪除空白行和刪除重複項。
Toolz 版本提供五種模式和四種清潔選項:
| 設定 | 它做什麼 | 預設 |
|---|---|---|
| A 到 Z | 具有自然數處理的區域設定字母順序 | 選定的 |
| 數字 | 按每行開頭的數字排序 | |
| 長度 | 按字元數排序,最短在前 | |
| 反轉 | 無需排序即可翻轉目前行順序 | |
| 隨機播放 | 隨機順序;再次點擊重新洗牌 | |
| 下降 | 將 A 的結果翻轉到 Z、數字或長度 | 關閉 |
| 刪除空白行 | 掉落空行或僅空格 | 打開 |
| 刪除重複項 | 保留每行的第一次出現 | 關閉 |
| 修剪空白 | 刪除每行兩端的空格和製表符 | 關閉 |
| 忽略案例 | 比較行作為小寫進行排序和重複 | 打開 |
輸出面板顯示有多少行出現以及有多少行被刪除,因此您可以一目了然地看到清潔選項的效果。
為什麼 file10 先於 file2?
因為純文字排序從左側一次比較一個字元的字串。 file10 和 file2 匹配四個字符,然後第五個字符是 1 在一和 2 在另一個。性格 1 之前排序 2,所以 file10 獲勝,而比較從來沒有考慮過 10 比 2 更大的事實。
自然排序透過將每輪數字讀取為數字來解決這個問題。 Toolz 行排序器和#39; a 到 Z 模式使用瀏覽器執行此操作'內建校對並開啟數字比較,這是所描述的選項 MDN 上的 String.prototype.localeCompare. 下面的訂購規則來自 Unicode 整理演算法,這就是瀏覽器決定的方式"é"排序靠近"e"而不是之後"z"。
這是三個規則下的相同五項清單:
| 輸入 | 位元組順序 (LC_ALL=C sort) |
字元順序,盒裝 | 自然秩序(Toolz 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. 自然秩序兩全其美。
案例如何影響字母順序排序?
按照原始位元組順序,每個大寫字母在每個小寫字母之前排序,因此名稱列表可以分為兩個字母順序:首先是所有大寫條目,然後是所有小寫條目。區域設定感知排序不會這樣做;它首先將字母視為同一個字母,並且僅使用大小寫來打破平局。
忽略大小寫選項更進一步,將所有內容比較為小寫。當兩行僅因情況而異時,它們會相等地進行比較,並且排序使它們保持輸入中出現的順序。這對於重複項很重要,如下所述。
使用內建樣本的工作範例
點擊並引用;載入樣本並引用;輸入是十行: banana, Apple, cherry, apple, 10, 2, Banana, date,一條空白線,並且 grape.
| 設定 | 輸出 | 顯示計數 |
|---|---|---|
| 預設值:A 到 Z,忽略大小寫,刪除空白行 | 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 因為它首先出現在輸入中。當忽略大小寫關閉時,瀏覽器' s 校對將小寫形式放在大寫形式之前,這是英語瀏覽器中的常見行為,並且沒有一行算作重複,因為它們不相同。下降是上升結果的完全反轉,因此平局線也會翻轉。
按字母順序與數字排序:您應該何時使用每種排序?
對於包含數字的文本,例如檔案名稱、版本標籤或街道地址,請使用字母(自然)模式。當每行都是數字或以一開頭時,請使用數字模式,並且您希望行按值排序。
數字模式以 JavaScript's 的方式讀取每行開頭的數字 parseFloat 做。它跳過前導空格,讀取可選的符號、數字、小數點和指數,並停在第一個無法繼續數字的字元處。不以數字開頭的行轉到底部並保留其原始順序。
| 線 | 使用的值 | 注意 |
|---|---|---|
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 跌入谷底;在排序價格之前刪除貨幣符號。
以數字模式下降會反轉整個結果,這意味著非數字線從下到上移動。如果您只想要按降序排列的數字,請先清除非數字行。
按長度排序如何運作?
長度模式根據行包含的字元數對行進行排序,最短在前,最長在前,降序。等長的行保持其輸入順序。
計數是 JavaScript 字串長度,計算 UTF-16 代碼單位。對於等於可見字元數的普通字母、數字和重音拉丁字元: café 是 4。 大多數表情符號和一些稀有字元使用兩個代碼單元,因此 ok👍 算是 4,而不是 3。對於單字、名稱或 URL 列表,這很少很重要。
長度排序對於發現異常值非常方便:異常長的產品標題、截斷的條目或清單中最短的關鍵字。
清潔和分類按什麼順序進行?
這些步驟總是以固定的順序運行,順序解釋了最令人驚訝的結果:
- 分裂 輸入行,接受 Unix 和 Windows 行結尾。
- 修剪 如果修剪空格開啟,則每行。
- 刪除空白行,如果在。即使修剪關閉,僅包含空格的行也算空白。
- 刪除重複項,如果開啟。保留第一個出現。當忽略大小寫時,僅因大小寫而不同的行將計為重複,並且第一個大小寫的外殼仍然存在。
- 排序、反轉或隨機播放 還剩下什麼。
因為修剪是可選的並且預設關閉,所以 apple 和 apple (帶有尾隨空格)比較重複項時有兩行不同的行,除非您打開修剪。這是最常見的原因 a "刪除重複項"傳遞似乎錯過了條目。從電子表格貼上標籤也會產生相同的效果。
對於較重的重複工作,例如保留最後一次出現或僅比較每行的一部分, 重複的換行指南 更深入地涵蓋選項。
反向與下降:有什麼差別?
反向翻轉當前行順序,無需對任何內容進行排序。 c, a, b 成為 b, a, c. 先降序排序,然後翻轉,所以 c, a, b 在 A 到 Z 中,降序變為 c, b, a.
當原始順序意味著某些內容時,例如首先包含最舊條目的日誌文件,並且您首先想要最新的條目,請使用「反轉」。當您想要從 Z 到 A 或從最大到最小的排序清單時,請使用「降序」。在反向和隨機播放模式下,降序按鈕將被停用,因為它沒有什麼可翻轉的。
洗牌夠隨機嗎?
洗牌使用 Fisher-Yates 演算法,當隨機數一致時,該演算法為每個可能的順序提供相同的機會,並且它從瀏覽器中抽取這些數字's Math.random(). 這對於隨機化閱讀清單、播放清單或演示順序來說很好。它不是加密隨機來源,因此對於任何人可能有理由預測或質疑結果(例如抽獎)的任何事情來說,它都是錯誤的選擇。對於那些,一個專用的 列出隨機化器 是比較適合的。再次按一下 Shuffle 以獲得新訂單。
在線對敏感清單進行排序安全嗎?
有了這個工具,是的。在瀏覽器標籤中的 JavaScript 中,對客戶端進行排序和清理。文字不會上傳或存儲,一旦頁面加載,工具就會繼續關閉網路。電子郵件地址、客戶姓名或內部主機名稱清單永遠不會離開您的電腦。
實際的大小限制是您的瀏覽器'記憶體而不是伺服器上限。在典型的筆記型電腦上,數萬行可以立即排序。數百兆位元組的非常大的檔案可以在命令列上更好地處理。
常見的行排序錯誤有哪些?
| 症狀 | 原因 | 修復 |
|---|---|---|
file10 上面 file2 在另一個工具中 |
簡單的性格比較 | 使用自然排序(此處為 A 到 Z)或 sort -V |
| 大寫條目全部位於頂部 | 位元組順序排序 | 使用區域設定感知排序或忽略案例 |
| 重複內容未刪除 | 尾隨空格或選項卡不同 | 開啟修剪空白 |
| &引用;蘋果&引用;和&引用;蘋果&引用;兩者都保留了 | 忽略案例已關閉 | 開啟忽略案例 |
1,000 排序為 1 |
千分隔符號結束數字 | 在數字排序之前刪除逗號 |
價格與 $ 在底部 |
行不以數字開頭 | 首先剝離貨幣符號 |
| 降序數字列表以單字開頭 | 非數字線反轉至頂部 | 首先刪除非數字行 |
| 輸出還有一個"刪除&引用;比預期的要多 | 尾隨換行符創建了空的最後一行 | 預期的;空白行被刪除 |
線上線路分類器的替代方案
| 工具 | 如何排序 | 筆記 |
|---|---|---|
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 區域設定,這就是為什麼相同的命令可以在兩台機器上發出不同的命令。設定 LC_ALL=C 強制位元組順序。
逐步對清單進行排序
- 打開 文字行排序器 並貼上您的列表,每行一項。
- 選擇 A 到 Z 表示單字和檔案名稱,選擇數字表示數字,或選擇長度表示字元數。
- 如果清單是從文件或電子表格貼上來的,請開啟修剪空白。
- 開啟 如果您想要每個條目一次,請刪除重複項;保留忽略大小寫以合併不同的大寫字母。
- 檢查輸出計數和"刪除並引用;數字。
- 點擊複製。
如果列表還需要標準化其大寫字母,則 案例轉換器指南 解釋標題、句子等情況,以及 文字工具中心 將其餘文字實用程式收集在一處。



