排序在非字母(即亚洲)语言中意味着什么?

2024-04-19

我有一些代码可以按对象属性对表列进行排序。我想到,在日语或中文(非字母语言)中,发送到排序函数的字符串将以字母语言的方式进行比较。

以日本姓氏列表为例:

寿拘 (Suzuki)
松坂 (Matsuzaka)
松井 (Matsui)
山田 (Yamada)
藤本 (Fujimoto)

当我通过 Javascript 对上面的列表进行排序时,结果是:

寿拘 (Suzuki)
山田 (Yamada)
松井 (Matsui)
松坂 (Matsuzaka)
藤本 (Fujimoto)

这和日本人的排序不一样音节表 http://en.wikipedia.org/wiki/Hiragana,这会按语音排列列表(就像日语词典的方式):

寿拘 (Suzuki)
藤本 (Fujimoto)
松井 (Matsui)
松坂 (Matsuzaka)
山田 (Yamada)

我想知道的是:

  1. 在排序函数中,一个双字节字符真的会与另一个双字节字符进行比较吗?
  2. 究竟发生了什么?
  3. (额外加分)这样的排序结果有什么意义吗?排序的概念在亚洲(和其他)语言中真的有效吗?如果是这样,这意味着什么?在为这些语言创建比较函数时应该努力做什么?

总结答案并得出结论的附录:

首先,感谢所有参与讨论的人。这是非常有用的信息。特别鸣谢bobince, Lie Ryan, Gumbo, 郑杰弗里, and Larry K,感谢他们深入而深思熟虑的分析。我将复选标记授予Larry K为我指明了我的问题未能预见的解决方案,但我勾选了我认为有用的每个答案。

共识似乎是:

  1. 中文和日文字符串按 Unicode 代码点排序,它们的排序可能基于某种基本原理,这种基本原理可能在某种程度上对知识渊博的读者来说是可以理解的,但在帮助用户查找他们想要的信息方面不太可能有太大的实用价值。重新寻求。

  2. 在语义或语音上进行排序所需的那种比较函数太麻烦而无法考虑追求,特别是因为结果可能不太令人满意,并且在任何情况下都必须更改每个比较算法语言。最好只是允许排序继续进行,甚至不尝试比较函数。

  3. 我可能在这里问了错误的问题。也就是说,我在“框内”思考了太多,而没有考虑到真正的问题不是如何使排序在这些语言中有用,而是如何为用户提供一种在列表中查找项目的有用方法。西方人自然而然地会想到排序来达到这个目的,我对此感到内疚。拉里·K(Larry K)向我指出了一篇维基百科文章,其中建议过滤功能可能对亚洲读者更有用。这就是我计划追求的目标,因为它至少与客户端排序一样快。我将保留列排序,因为它在西方语言中很容易理解,并且因为任何语言的使用者都会发现日期和其他基于数字的数据类型的排序很有用。但我还将添加过滤机制,这对于任何语言的长列表都很有用。


在排序函数中,一个双字节字符真的会与另一个双字节字符进行比较吗?

当地人StringJavaScript 中的 type 基于 UTF-16 代码单元,这就是进行比较的内容。对于基本多语言平面(所有这些都是)中的字符,这与 Unicode 代码点相同。

Shift-JIS 等编码中的术语“双字节”在 Web 上下文中没有任何意义:DOM 和 JavaScript 字符串本身就是 Unicode,浏览器接收到的编码页面中的原始字节早已不复存在。

这样的结果有什么意义吗?

小的。 Unicode 代码点并不声称提供任何特定的排序……其中之一是,因为is没有全球公认的订购方式。即使对于 ASCII 拉丁字符的最基本情况,语言也存在分歧(例如,关于是否v and w是同一个字母,还是大写i is I or İ)。而 CJK 则变得更加粗糙。

主要的 Unicode CJK 统一表意文字块恰好是按部首和笔画数排序的(康熙字典顺序),这可能有点用处。但是使用任何其他 CJK 扩展块中的字符,或者混合一些假名或罗马字,它们之间将没有有意义的顺序。

统一码联盟尝试 http://unicode.org/reports/tr10/定义一些通用的排序规则,但它很复杂并且通常不会在语言级别上尝试。真正需要语言敏感排序能力的系统(例如操作系统、数据库)往往有自己的排序规则。

这与五十音表的顺序不同

是的。除了一般的校对问题之外,通过音节准确地处理汉字是一项非常困难的任务,因为你必须猜测发音。 JavaScript 无法真正知道“藤本”指的是“Fujimoto”而不是“touhon”;这类事情需要深入的内置字典和仍然不可靠的启发式方法......而不是您想要构建到编程语言中的那种东西。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

排序在非字母(即亚洲)语言中意味着什么? 的相关文章

  • Angular 2 Material 2 日期选择器日期格式

    我不知道如何更改材料2日期选择器的日期格式 我已阅读文档 但我不明白我实际上需要做什么 datepicker默认提供的输出日期格式为f e 6 9 2017 我想要实现的目标是将格式更改为类似的格式9 Jun 2017或任何其他 文档htt
  • ajaxStop() 不触发

    这是不起作用的代码 document ajaxStop function this unbind ajaxStop prevent running again when other calls finish Display everythi
  • 如何防止 gulp-notify 破坏 Windows 中的 gulp-watch?

    我正在使用吞咽通知 https www npmjs org package gulp notify插入 这是我如何在 gulpfile js 中实现它的示例 您可以看到我也在使用 gutil 和 livereload 我不知道它们是否发挥任
  • html 表格单元格的条件格式

    是否有现成的解决方案可以对 HTML 表格进行条件格式设置 通过条件格式 我更感兴趣的是根据该列或其他列 在同一个表中 的值 数字 将不同的颜色作为单元格背景 类似于我们在 Excel 条件格式 gt 色阶 gt 红黄绿中的内容 我想在通过
  • 限制可选 DOM 复选框

    我试图限制用户可以选择的复选框数量 这些复选框是为数组中的每个项目生成的 DOM 输入对象 我目前对此没有运气 因此非常感谢任何帮助 谢谢 在这里小提琴 http jsfiddle net vVxM2 222 http jsfiddle n
  • 了解 sort() 比较函数

    我正在使用一个电子商务平台 该平台无法重新排序产品属性字段的选项 这真的很糟糕 因为要插入新选项 您几乎必须删除所有现有选项并重新开始 我正在尝试在客户端进行操作 这是我正在处理的内容 这是针对鞋码的 9 EE 9 1 2 EE 10 EE
  • 如何导入和导出 javascript ES6 类

    我是 javascript 和 nodejs 的新手 我正在使用这个项目来发展我的技能并学习新技术 目前我的项目使用多个相互依赖的类 类文件位于不同的目录中 我当前正在尝试使用 export 和 require 语句来允许在其他文件中引用类
  • 在 O(n) 时间内排序?

    我被这个问题困扰了 2周 知道如何处理它吗 令 L 为 n 个不同整数的列表 假设 L 的 x 的元素在 1 750 范围内 设计线性排序算法对 L 的元素进行排序 我已经尝试过插入排序 但我不确定我的方法是否正确 Construct an
  • 无法实例化模块 [$injector:unpr] 未知提供程序:$routeProvider

    我从 AngularJS 升级时收到此错误1 0 7 to 1 2 0rc1 ngRoute 模块不再是核心的一部分angular js文件 如果您继续使用 routeProvider 那么您现在需要包括angular route js在你
  • 使用文件 API 将资源加载到 Three.js 中

    我想创建导入 3D 模型以在浏览器中查看的功能 方法是使用File API http www html5rocks com en tutorials file dndfiles Three js 加载器在我托管的文件上运行良好 我的理解是加
  • 如何检测 Java 字符串中的 unicode 字符?

    假设我有一个包含 的字符串 我如何找到所有这些 un icode 字符 我应该测试他们的代码吗 我该怎么做呢 例如 给定字符串 A X 我想将其转换为 AYXY 我想对其他 unicode 字符做同样的事情 并且我不想将它们存储在某种翻译映
  • 循环遍历元素并逐步为每个元素应用 CSS 规则

    我有一个网格布局 每个网格布局中都有不同数量的元素 我想动态添加内联grid column通过循环遍历 div 中存在的每个元素的 CSS 规则 ul 与一类 list 所以 HTML 代码的输出需要是 ul class list ul u
  • 如何在Python中按AaB而不是ABa顺序对字符串进行排序

    我正在尝试对字符串进行排序 为 punnetsquare 制作基因型 我目前的实现是 unsorted genotype ABaB sorted genotype sorted list unsorted genotype sorted s
  • 使用日期字符串数组在引导日期选择器中设置禁用月份不起作用

    我有一个日期选择器 其配置如下 HTML div class input group date div
  • 禁用特定 div 上的 Tab 键

    我有以下结构 div div Some content div div Some content div div 我想 禁用 div2 上的 tab 键 我的意思是按下 tab 键时 div2 的元素不会获得焦点 有没有简单的方法可以使用
  • 如何处理requireJs超时错误?

    我正在使用 require js 作为加载框架编写一个移动混合应用程序 我遇到加载错误的问题 我想做的是在设备离线且无法下载在屏幕上显示地图所需的 google 地图 API 脚本时设置后备解决方案 我得到的只是 Uncaught Erro
  • Firebase 警告:使用 Firebase Cloud Function 搜索数据时使用未指定的索引

    我构建了一个 Firebase 云函数 用于查找 IsNotificationEnabled 值等于 true 的用户 我的部分职能 export const sendPushNotification functions https onR
  • IE 中的每个 JavaScript 支持?

    我有这个代码
  • 如何使用 jQuery 或 JavaScript 聚焦 或 标签?

    for var i 0 i
  • 使用 JQuery 根据下拉列表选择的值显示/隐藏控件

    我正在尝试使用 JQuery 根据下拉菜单的选定索引显示 隐藏 div 标签 但它不起作用 任何帮助将不胜感激 Thanks

随机推荐

  • Linqpad 中重新运行查询之间会保存什么状态?

    Linqpad 中重新运行查询之间会保存什么状态 我认为没有 所以如果你运行一个脚本两次 它两次都会得到相同的结果 但是 在同一个 Linqpad 选项卡中运行下面的 C 程序两次 您会发现第一次它打印一个空列表 第二次打印一个带有消息 h
  • 为不存在的文件创建 IShellItem 实例

    我怎样才能获得外壳项目 http msdn microsoft com en us library bb761144 aspx不存在的文件 或目录 的对象 SHCreateItemFromParsingName http msdn micr
  • 在查询上下文或传递的道具中找不到“客户端”

    这就是我尝试在我的 React Native 应用程序中实现 apollo graphQL 的方式 但我确实得到了错误 Could not find client in the context of Query or as passed p
  • Symfony 4 通过用户名更改密码 - 电子邮件不能为空

    介绍 我一直在尝试找出如何创建由用户名值控制的重置密码表单 错误 Path Message Invalid value Violation data email This value should not be blank null Con
  • 如何用jquery一一显示和隐藏每个div

    我想创建一个快讯标题 但我不知道问题出在哪里 因为我是网页设计的初学者 D so 我想创建标题的一部分 显示 淡入 一个标题并延迟隐藏 淡出 然后显示下一个标题 不停地循环 请帮助我学习如何创建 D 这些是我写的代码 div div cla
  • 在 angular.js 上使用 HTML5 PushState

    我正在尝试实现 html5 的 Pushstate 而不是 Angularjs 使用的 导航 我尝试过在谷歌上搜索答案 也尝试过 Angular irc 聊天室 但还没有成功 这是我的controllers js function Phon
  • 创建批处理文件以更改 Windows 7 中的电源选项

    有没有办法创建批处理文件并将其放在桌面上以更改 Windows 7 中的电源选项 具体来说 我将计算机设置为 30 分钟后休眠 现在我使用 Serve To Me Stream To Me 应用程序 我希望能够快速更改电源设置以允许连续操作
  • android在picasso加载后获取Drawable图像

    我正在使用 Picasso 库从 url 加载图像 我使用的代码如下 Picasso with getContext load url placeholder R drawable placeholder error R drawable
  • 如何将子集合添加到 Firebase Cloud Firestore 中的文档

    该文档没有任何有关如何将子集合添加到文档的示例 我知道如何将文档添加到集合以及如何将数据添加到文档 但是如何将集合 子集合 添加到文档 难道不应该有这样的方法 dbRef document example addCollection sub
  • 创建 UI 设计师

    我想使用 Silverlight WPF 或 WinForms 为自定义系统创建一个 UI 设计器 解决这个问题的最佳方法是什么 我应该注意哪些命名空间 SDK 等 我建议你看看sharpdevelophttp www icsharpcod
  • setTimeout 会使用 Heroku 免费的 dyno 小时吗?

    我有一个机器人 它的命令允许用户输入一条用破折号分隔的消息 然后输入指定的时间 然后将其传递给机器人 机器人在指定的时间过去后用该消息提醒用户 function reminder msg const message msg content
  • 如何使用位码选项制作胖框架?

    环境 XCode 7 0 1 模块 Objective C 捆绑类型 框架 你好 我正在尝试创建一个支持armv7 armv7s arm64 i386和x86 64的框架 我正在使用聚合来制作脂肪库 在聚合脚本中 我正在运行两个 xcode
  • VS Code - 错误:EPERM:不允许操作

    在 Windows 10 中使用 VS code 时 我遇到了很多权限问题 When trying to move a folder 错误 EPERM 不允许操作 重命名 路径 a gt 路径 b When deleting a folde
  • 等待 Firestore 查询完成

    我目前正在尝试在 firestore 中运行多个查询 并希望等待它们全部完成后再执行下一个代码 我已经阅读了几种可能的途径 但还没有找到一个好的 Android 示例 public HashMap
  • 单击项目菜单时如何关闭抽屉菜单?

    这是点击事件 view setOnTouchListener new View OnTouchListener Override public boolean onTouch View v MotionEvent event v setBa
  • 为什么使用分号? [复制]

    这个问题在这里已经有答案了 除了主观视觉感知和同一行有多个语句的情况之外 是否有任何理由在 JavaScript 中的语句末尾使用分号 看起来有大量证据表明分号的使用是高度可选的 并且只有少数特定情况需要使用分号 因为当 JavaScrip
  • FQL Multiquery 编写联接查询

    简单的说 我需要帮助构建 FQL 多查询请求 该请求将执行以下操作 然后从登录用户的好友列表中获取 UID 使用这些 ID 获取过去两周的所有评论和消息 来自流 最后 将这些结果与用户名连接起来 这是我迄今为止的疑问 1 GRAB UID
  • with(nolock) 或 (nolock) - 有区别吗?

    一切都基于 with nolock 完全适合这种情况的假设 已经有很多问题在争论是否使用 with nolock 我环顾四周 无法找到使用之间是否存在实际差异with nolock select customer zipcode from
  • 如何使用 jQuery 验证插件验证正则表达式?

    如何使用 jQuery 验证插件验证正则表达式 在此代码中 我们可以使用一个 jQuery 插件 jQuery Validation 插件来验证表单 但我不知道如何使用此插件来验证正则表达式
  • 排序在非字母(即亚洲)语言中意味着什么?

    我有一些代码可以按对象属性对表列进行排序 我想到 在日语或中文 非字母语言 中 发送到排序函数的字符串将以字母语言的方式进行比较 以日本姓氏列表为例 寿拘 Suzuki 松坂 Matsuzaka 松井 Matsui 山田 Yamada 藤本