行排序(字典 / 数字 / 长度)
三种模式:字典排序(声明 locale,默认 en 的 Intl.Collator,或确定性 codepoint 码点序)、数字排序(整行数值,2/10/1→1/2/10)、按字素长度排序;可升序/降序,结果元数据写明模式与 locale。
输入与参数
input— 输入文本(每行一条)steps— 步骤顺序(逗号分隔,留空=仅本操作)sortMode— 排序模式sortDirection— 方向locale— 字典排序 locale(BCP-47 或 codepoint)lineEnding— 输出换行风格includeBom— 下载时包含 UTF-8 BOM
真实示例
2
10
1 → 数字模式
→ 1
2
10 (字典模式另标注为 1
10
2:locale=en 用 Intl.Collator 字符串比较;locale=codepoint 为确定性码点序)
限制与失败处理
字典排序依赖运行时 Intl.Collator 实现,不同 ICU 版本可能有细微差异(故提供 codepoint 确定性选项并在元数据标注 locale);数字模式只识别整行数值,不做「第 10 章」这类内嵌数字的自然排序;长度模式按 Intl.Segmenter 字素数(组合字符/ZWJ emoji 记 1),不是 UTF-16 长度。上限 2 MiB / 10 万行,可取消。
FAQ
为什么字典排序把 10 放在 2 前面?
字典排序逐字符比较字符串,"10" 的第二个字符 "0" 小于 "2",所以 1 / 10 / 2。需要数值大小请用数字模式;两者都在结果元数据明确标注,绝不混用。
locale 会影响结果吗?
会。字典排序用 Intl.Collator(locale, {sensitivity:"variant", numeric:false}),重音、大小写与不同语言的排序规则可能不同;选择 codepoint 则用 Unicode 码点确定性顺序,结果不随运行环境变化。
混合数字与非数字行怎么排?
数字模式下只把「整行是数值」的行按数值排序,非数字行统一放在后面并按字典序排列;该分区不随升降序翻转。