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