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 < ab | 47| numeric | true | 使用数字排序 | 1 < 2 < 10 < 11 | 48| | false | 不使用数字排序 | 1 < 10 < 11 < 2 | 49| caseFirst | upper | 大写排前面 | ab,aB, AB,Ab => AB < Ab < aB < ab | 50| | lower | 小写排前面 | ab,aB, AB,Ab => ab < aB < Ab < AB | 51| | false | 不区分首字母大小写 | ab,aB, AB,Ab => ab < aB < Ab < 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