- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
在芬兰语中,我们将 W
排在 V
之后(与英语一样),但是因为 W
不是芬兰语的母语字母,所以它被认为是V
的变体,它被排序为等于 V
,但在两个词之间唯一的区别是 V
是W
,则V
-版本先排序。一个例子阐明了正确的顺序:
Vatanen, Watanen, Virtanen
在芬兰语中,V
和W
整理为A
和Á
。 Á
的排序方式与 A
类似,但在唯一不同的情况下,未重音的排在第一位。同样的规则适用于所有其他重音字母,但 Å
、Ä
和 Ö
在 Z 之后单独整理。
问题:以预定义方式对变体进行排序的最佳算法是什么?(例如。[Watanen, Vatanen, Virtanen]
到 [Vatanen, Watanen, Virtanen]
)?
补充:这个问题与扩展有关,以涵盖在 http://cldr.unicode.org/index/cldr-spec/collation-guidelines 中定义的其他变体。 ,因为该技术很可能是相同的,并且这个问题的答案有利于尽可能广泛的受众,并且可以使排序算法与 Unicode CLDR 中定义的排序规则兼容。 Unicode CLDR 定义了三个级别的字母差异:初级(基本字母)、二级(重音字母)和三级(字符大小写)。
我想到了某种数组准备,比如在数字排序中,我们可以用零填充所有数字,使它们可以与字符串进行比较。一个示例:数组 [file1000.jpg, file3.jpg, file22.jpg]
可以准备通过用零填充来使其与字符串具有可比性: [文件 1000.jpg、文件 0003.jpg、文件 0022.jpg]
。由于数组的准备,我们可以使用原生 Array.sort() 非常快速地对其进行排序。
目标语言是Javascript,不支持基于排序规则的排序,所以自定义排序功能必须自己制作。该算法是首选,但如果您也有代码,则值得 +1。
最佳答案
自从您最初提出这个问题以来,JavaScript 终于获得了一些体面的语言环境支持,包括整理。
阅读新的 EcmaScript 6 / Harmony功能 Intl
并且,具体来说,Intl.Collator
.
文档实际上并没有明确说明芬兰语支持现代排序顺序和传统排序顺序,但我已经尝试过了,它们是支持的。
要获得传统订单的整理器,您需要传递一个“花哨的”语言代码字符串:fi-u-co-trad
。对于“改革后”的排序顺序,有 fi-u-co-reformed
。这分解为:
fi
- 芬兰语的 ISO 639 语言代码。u
- 启用 Unicode 功能/选项。 (没有很好的记录)co
- 排序规则选项。trad
- 传统排序顺序。我阅读了有关西类牙语的此选项,并且仅通过测试发现它也适用于芬兰语。 (没有很好的记录)改革
- 改革排序顺序。似乎是“传统”的反义词。如果您既不指定 trad
也不指定 reformed
,您将得到 default
,在某些浏览器上可能是 trad
和 对其他人进行改革
。代码:
var surnames = ['Watanen', 'Vatanen', 'Virtanen'];
var traColl = new Intl.Collator('fi-u-co-trad');
var refColl = new Intl.Collator('fi-u-co-reformed');
var defColl = new Intl.Collator('fi');
console.log('traditional:', traColl.resolved.requestedLocale + ' -> ' + traColl.resolved.collation, surnames.sort(function (a, b) {
return traColl.compare(a,b);
}));
console.log('reformed:', refColl.resolved.requestedLocale + ' -> ' + refColl.resolved.collation, surnames.sort(function (a, b) {
return refColl.compare(a,b);
}));
console.log('default:', defColl.resolved.requestedLocale + ' -> ' + defColl.resolved.collation, surnames.sort(function (a, b) {
return defColl.compare(a,b);
}));
输出:
traditional: fi-u-co-trad -> trad ["Vatanen", "Watanen", "Virtanen"]
reformed: fi-u-co-reformed -> reformed ["Vatanen", "Virtanen", "Watanen"]
default: fi -> default ["Vatanen", "Virtanen", "Watanen"]
在 Google Chrome 中测试过,根据我在网上看到的,它在这方面落后于 Firefox。
关于javascript - 在 Javascript 中基于语言环境的排序,以预定义的方式对重音字母和其他变体进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12624532/
我正在创建一个连接到 firebase 的应用程序。但我面临一些问题。当同步我的 gradle 文件时,我收到此警告 WARNING: API 'variant.getMergeResources()
想知道是否有任何方法可以将变体分配给自定义 radio 输入?我想为 2 天、3 天和标准运输设置不同费率的分级运输。我可以使用变体来做到这一点,但下拉菜单对我不起作用。我想要日期信息和日期选择器,以
我是 Haskell 的新手。鉴于 Haskell 的整个前提是函数将始终返回相同的值,我希望有某种方式,例如在编译时计算常量的斐波那契值,就像我可以在 C++ 中使用模板元编程一样,但我不知道该怎么
我是 OCaml 的新手,但过去两天一直在工作,以便更好地了解如何使用它。我最近做了很多事情,但有些事情阻碍了我前进。 我正在尝试在 OCaml 中实现 evaexpr。使用这种语言非常容易,你会说:
我有一个使用一些typedef的std::variant的代码库。 最初,它们是不同的类型,但现在它们像下面的示例一样重叠 typedef int TA; typedef int TB; std::v
鉴于此: data Foo = Bar { name :: String } | Baz { nickname :: String } 函数 name 和 nickname 似乎都是 Foo -> S
嘿,我猜这可能相当微不足道,但我很难找到答案或弄清楚它。 我正在尝试创建一个带有任意间距的彩色方 block 网格。这本身很容易做到,特别是因为我只需要九个正方形。但是虽然我看着我完成的代码,我不禁觉
我有 woocommerce 设置,其中包含产品和这些产品的变体。当我更改变化时(例如,产品的尺寸(340克或900克),我希望它在页面上动态更新价格,以便人们可以看到两种尺寸之间的价格差异。目前,我
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。 关闭 7 年前。
在我的一节课上,我被问到这是一个脑筋急转弯,但我无法弄明白(这不是家庭作业问题,只是其中一位助教给我们的一个脑筋急转弯让我们思考)。 给你一根杆,上面有 n 个要切割的点,例如 [1,5,11],以及
关于 CRP如果我想实现它的细微变化(使用模板模板参数),我会得到一个编译错误: template class Derived> class Base { public: void Call
我正在创建一个 woocommerce 主题,并且我有产品变体,即显示在产品详细信息页面上的尺寸,但问题是我想通过使用产品 ID 在我的自定义 php 页面中获取所有变体,任何人都可以帮助我。 提前致
我正在使用 Ionic 开发移动应用程序,我必须与 Twitter API 连接。 所以我使用 ng-cordova 和 $cordovaAuth .但是当我这样做时: $cordovaOauth.t
这里的网站有一个音乐播放器http://www.numberonedesigns.com/ubermusic.com/ ...当点击下一个按钮并随机突出显示时,它不会正确随机化。它总是返回到播放列表中
我有列 sql 变体,其含义如下:100, 150, D1我正在尝试根据特定逻辑将列中的所有数字转换为字母(例如 D1)以防万一。但是 150 有空格并且 CASE WHEN 不起作用。 这是我正在使
有没有一种快速方法可以用从匹配模式派生的数据替换所有出现的某些模式? 例如,如果我想将字符串中出现的所有数字替换为用 0 填充到固定长度的相同数字。 在本例中,如果长度为 4,则 ab3cd5 将变为
我目前正在寻找生成具有特定位数的数字列表,我的代码当前如下: | Python 2.7 | import itertools inp = raw_input('Number of digits to
我正在对类型系统进行研究。对于这项工作,我正在研究流行语言中变体、结构子类型、通用多态性和存在多态性的用法。像 heskell、ocaml 这样的功能性语言提供了这样的功能。但我想知道像 C++ 这样
这是 variant.hpp 文件中的相关代码(可在此处找到 http://www.boost.org/doc/libs/1_49_0/boost/variant/variant.hpp) templ
您好,我有两个具有多对多关系的表和一个联结表。简而言之,具有不同属性的产品也随之增加了价格。为了更清楚地说明我是产品和属性表。 +-------------+------------+--------
我是一名优秀的程序员,十分优秀!