• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# 本地习惯排序
2
3## 使用场景
4
5在用户使用到排序的场景下,提供符合用户使用习惯的排序方法展示内容。例如,设置中“系统和语言”的语言列表,列表需要按照当地用户习惯进行排序。
6
7## 开发步骤
8
9多语言列表按照本地习惯进行排序,通过[Collator](../reference/apis-localization-kit/js-apis-intl.md#collator8)类的[compare](../reference/apis-localization-kit/js-apis-intl.md#compare8)接口实现,具体开发步骤如下。
10
111. 导入模块。
12   ```ts
13   import Intl from '@ohos.intl';
14   ```
15
162. 创建collator排序对象。
17   构造函数支持通过CollatorOptions设置不同的排序格式,具体请参考表1。
18   ```ts
19   let collator = new Intl.Collator(locale: string | Array<string>, options?: CollatorOptions);
20   ```
21
223. 比较字串。
23   ```ts
24   let compareResult = collator.compare("first", "second");
25
26   // compareResult 为负数,表示第一个参数排在第二个参数之前
27   // compareResult 为0,表示第一个参数与第二个参数排序不分先后
28   // compareResult 为正数,表示第一个参数排在第二个参数之后
29   ```
30
31**排序格式选项**
32
33**表1** CollatorOptions各参数取值和显示效果
34
35| 名称 | 取值 | 描述 | 显示效果 |
36| -------- | -------- | -------- | -------- |
37| localeMatcher | lookup | 模糊匹配 |  |
38|  | best fit | 准确匹配 |  |
39| usage | sort | 用作排序 |  |
40|  | search | 用作查找匹配的字符串 |  |
41| sensitivity | base | 不同的字母比较不相等 | 例如: a ≠ b, a = á, a = A. |
42|  | accent | 不同的字母或读音比较不相等 | 例如: a ≠ b, a ≠ á, a = A. |
43|  | case | 不同的字母或同一字母大小写比较不相等 | 例如: a ≠ b, a = á, a ≠ A. |
44|  | variant | 不同的字母或读音及其它有区别的标志或大小写都是不相等的 | 例如: a ≠ b, a ≠ á, a ≠ A. |
45| ignorePunctuation | true | 忽略标点 | a,b = ab |
46|  | false | 不忽略标点 | a,b &lt; ab |
47| numeric | true | 使用数字排序 | 1 &lt; 2 &lt; 10 &lt; 11 |
48|  | false | 不使用数字排序 | 1 &lt; 10 &lt; 11 &lt; 2 |
49| caseFirst | upper | 大写排前面 | ab,aB, AB,Ab =&gt; AB &lt; Ab &lt; aB &lt; ab |
50|  | lower | 小写排前面 | ab,aB, AB,Ab =&gt; ab &lt; aB &lt; Ab &lt; AB |
51|  | false | 不区分首字母大小写 | ab,aB, AB,Ab =&gt; ab &lt; aB &lt; Ab &lt; AB |
52| collation | big5han | 拉丁字母使用的拼音排序 |  |
53|  | compat | 兼容性排序,仅用于阿拉伯语 |  |
54|  | dict | 词典风格排序,仅用于僧伽罗语 |  |
55|  | direct | 二进制码点排序 |  |
56|  | ducet | Unicode排序规则元素表 |  |
57|  | eor | 欧洲排序规则 |  |
58|  | gb2312 | 拼音排序,仅用于中文排序 |  |
59|  | phonebk | 电话本风格排序 |  |
60|  | phonetic | 发音排序 |  |
61|  | pinyin | 拼音排序 |  |
62|  | reformed | 瑞典语排序 |  |
63|  | searchjl | 韩语初始辅音搜索的特殊排序 |  |
64|  | stroke | 汉语的笔画排序 |  |
65|  | trad | 传统风格排序,如西班牙语 |  |
66|  | unihan | 统一汉字排序,用于日语、韩语、中文等汉字排序 |  |
67|  | zhuyin | 注音排序,仅用于中文排序 |  |
68
69**开发实例**
70
71```ts
72// 导入模块
73import I18n from '@ohos.i18n';
74import Intl from '@ohos.intl';
75
76// 创建排序对象
77let options: Intl.CollatorOptions = {
78    localeMatcher: "lookup",
79    usage: "sort",
80    sensitivity: "case" // 区分大小写
81};
82let collator = new Intl.Collator("zh-CN", options);
83
84// 区分大小写排序
85let array = ["app", "App", "Apple", "ANIMAL", "animal", "apple", "APPLE"];
86array.sort((a, b) => {
87    return collator.compare(a, b);
88})
89console.log("result: ", array);  // animal ANIMAL app App apple Apple APPLE
90
91// 中文拼音排序
92array = ["苹果", "梨", "香蕉", "石榴", "甘蔗", "葡萄", "橘子"];
93array.sort((a, b) => {
94    return collator.compare(a, b);
95})
96console.log("result: ", array);  // 甘蔗,橘子,梨,苹果,葡萄,石榴,香蕉
97
98// 按笔画排序
99options = {
100    localeMatcher: "lookup",
101    usage: "sort",
102    collation: "stroke"
103};
104collator = new Intl.Collator("zh-CN", options);
105array = ["苹果", "梨", "香蕉", "石榴", "甘蔗", "葡萄", "橘子"];
106array.sort((a, b) => {
107    return collator.compare(a, b);
108})
109console.log("result: ", array);  // 甘蔗,石榴,苹果,香蕉,梨,葡萄,橘子
110```
111