文本和日常工具·文本工具包
为什么计算机之间的排序列表不同:区域设置感知排序解释
· 为什么它很重要
文本工具 排序 语言环境
解释代码点顺序和区域设置排序规则之间的差异,为什么 ä、é 和大写字母在不同计算机上出现在不同位置,以及如何毫无意外地共享排序列表。
同一个列表,两个订单 - 同事的排序将 Å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` 这样的行从其开头排序,而不是按逗号后面的名称排序。当字段很重要时,使用合适的数据工具解析结构化行;行排序不应该假装理解列。
该工具包确实涵盖了数字排序和逆序,但不包括按列排序
区域设置感知排序很有用,因为人类字母表无法安全地简化为一种原始字符数规则。这也意味着未固定的默认区域设置不是跨机器再现性契约。文本工具包使用浏览器排序规则,默认进行不区分大小写和数字识别的比较,并且可以反转请求的方向。
对于跨团队环境,将输出作为契约:选择一个浏览器会话,设置预期选项,排序并分发该确切文本。当出现另一个顺序时,先比较工件,然后再争论哪个字母表是正确的。源代码支持解释该机制,而保存的结果提供了实现本身无法全局保证的稳定序列。