繁體中文

文字與日常工具·文字工具包

為什麼電腦之間的排序清單不同:區域設定感知排序解釋

· 為什麼它很重要

文字工具 排序 語言環境

以兩種不同字母順序排列的相同多語言列表
原始 ToolAcre 向量圖

解釋代碼點順序和區域設定排序規則之間的差異,為什麼 ä、é 和大寫字母在不同機器上出現在不同位置,以及如何毫無意外地共享排序列表。

相同的列表,兩個訂單 - 同事的排序將 Ångström 放在其他地方,你們都沒有錯

團隊負責人可以將相同的與會者姓名清單發送給兩個國家的同事,並收到兩個看似合理的字母順序。包含重音字母的名稱通常是爭論的焦點,因為字母順序排列並不是僅由可見的基本字母決定的。瀏覽器環境參與比較。

兩位同事都不需要犯手動錯誤。實際問題是「按字母順序排序」並不能辨識多語言文字的通用序列。在審查新增或刪除之前,同意哪個已完成的訂單具有權威性;否則,逐行比較將顯示僅由單獨的排序決策引起的移動。

代碼點順序 - 為什麼天真的排序將每個大寫字母放在每個小寫字母之前,並將重音字母推到末尾

該大綱描述了一種樸素的代碼點排序,它將大寫字母放在小寫字母之前,並將重音字母放在末尾,但這不是文字工具包實現的。它的 `sortLines` 函數複製行並將每一對與 `localeCompare` 進行比較,因此會參考瀏覽器排序規則而不是原始字元數。

大小寫處理在函數選項中也是明確的。區分大小寫的排序要求 `variant` 敏感性,而預設的不區分大小寫模式則要求 `base` 敏感性。這可以使不同大小寫或重音的形式進行比較,使它們的相對位置取決於提供給排序器的穩定順序,而不是強制大寫字母進入單獨的區塊。

ToolAcre 不使用樸素的程式碼點順序:它為每一行呼叫 localeCompare

比較將 `undefined` 作為區域設定傳遞,這要求執行時間使用其預設區域設定行為。原始碼不承諾瑞典語、德語、英語或任何其他命名排序規則,且此函數表示的介面沒有區域設定參數。因此,在這裡公佈確切的國家命令將超出執行證據的範圍。

此邊界解釋了為什麼結果可能會有所不同,而無需準確證明是哪個設定導致了特定差異。當可重複性很重要時,請記錄瀏覽器和環境,但不要從一個重音名稱的位置推斷區域設定。可靠的事實是,工具包將執行時期的預設排序委託給 `localeCompare` ,而不是固定共享語言。

瀏覽器提供預設區域設置,但工具包不提供區域設定選擇器

數位字串也受到特殊對待。此函數預設 `numeric` 為 true 並將該選項轉送至 `localeCompare`。因此,包含 `item2` 和 `item10` 的清單旨在將較小的數字按升序排列在前面,而不是將 10 中的字元 `1` 與 2 中的字元 `2` 進行比較。

當資料必須通過另一個行為未知的排序器時,零填充仍然有用,但不需要在此處獲得數字感知排序。如果需要精確的詞彙順序,則底層函數支援關閉數字比較。重要的教訓是記錄所選的選項,而不是假設每個字母命令都以相同的方式對待嵌入的數字。

Digit 預設按數字排序,因此 item2 位於 item10 之前

作為可審查的範例,請將 `Ångström`、`Ana`、`Émile`、`item2` 和 `item10` 放在不同的行上,然後在團隊選擇的瀏覽器中排序一次。將該輸出儲存為參考。本文故意不發布第二個瀏覽器的預期重音名稱順序,因為儲存庫不包含建立它的固定區域設定固定裝置。

如果同事有另一個訂單,請將兩個完成的文字與基於行的差異進行比較。 diff 實作透過最長公共子序列表對齊精確相等的行,並將不匹配的行標記為新增或刪除。它忠實地報告了結構運動,但它沒有解釋哪個區域設定比較將名稱放在任何位置。

工作範例:比較一個瀏覽器產生的訂單,而不是發明兩個區域設定結果

最簡單的協作規則是排序一次並共享結果行,而不僅僅是未排序的輸入加上按排序的指令。純文字結果保留了實際審查的決定。收件人可以搜尋、註釋或區分該工件,而無需要求自己的瀏覽器重新建立依賴環境的排序。

當出處很重要時,也保留原始清單。排序後的副本是供審查的演示文稿,而原始副本可能帶有有意義的到達或來源訂單。命名參考檔案並記錄排序是否為升序、區分大小寫和數字,將模糊的字母操作轉變為可重複的團隊交接。

這不包括什麼 - 數字排序選項、逆序和按特定列排序

原始大綱表示不包括數字排序選項和逆序,但來源與此限制相矛盾。 `sortLines` 接受數字選項和升序或降序方向,而 `reverseLines` 可以反轉目前行順序。這些功能不應被描述為工具包的文字邏輯中不存在。

按特定列排序確實超出了此函數的範圍。每個完整的行都是比較值,因此諸如 `Paris, Ana` 這樣的行會從其開頭排序,而不是按逗號後面的名稱排序。當欄位很重要時,使用合適的資料工具解析結構化行;行排序不應該假裝理解列。

該工具包確實涵蓋了數字排序和逆序,但不包括按列排序

區域設定感知排序很有用,因為人類字母表無法安全地簡化為一種原始字元數規則。這也意味著未固定的預設區域設定不是跨機器再現性契約。文字工具包使用瀏覽器排序規則,預設進行不區分大小寫和數字識別的比較,並可以反轉請求的方向。

對於跨團隊環境,將輸出作為契約:選擇一個瀏覽器會話,設定預期選項,排序並分發該確切文字。當出現另一個順序時,先比較工件,然後再爭論哪個字母是正確的。原始碼支援解釋該機制,而保存的結果提供了實現本身無法全域保證的穩定序列。