php实现通讯录按字母分组,iOS - 通讯录开发,名字按拼音首字母分组排序
应项目需要,需添加一个自定义的通讯录,所以需要对联系人按名字的首字母进行排序。以下方法已经封装好,复制到项目中直接可以使用。
该方法是使用UILocalizedIndexedCollation来进行本地化下按首字母分组排序的,是建立在对对象的操作上的。不同于以前的那些比如把汉字转成拼音再排序的方法了,效率不高,同时很费内存。但该方法有一个缺点就是不能区分姓氏中的多音字,比如“曾”会被分到"C"组去。
其中参数arr是一个包含对象的数组,同时对象有name属性,name属性就是要进行分组排序的联系人姓名,调用该方法会返回一个已经排序好的数组,方法如下:
// 按首字母分组排序数组
-(NSMutableArray *)sortObjectsAccordingToInitialWith:(NSArray *)arr {
// 初始化UILocalizedIndexedCollation
UILocalizedIndexedCollation *collation = [UILocalizedIndexedCollation currentCollation];
//得出collation索引的数量,这里是27个(26个字母和1个#)
NSInteger sectionTitlesCount = [[collation sectionTitles] count];
//初始化一个数组newSectionsArray用来存放最终的数据,我们最终要得到的数据模型应该形如@[@[以A开头的数据数组], @[以B开头的数据数组], @[以C开头的数据数组], ... @[以#(其它)开头的数据数组]]
NSMutableArray *newSectionsArray = [[NSMutableArray alloc] initWithCapacity:sectionTitlesCount];
//初始化27个空数组加入newSectionsArray
for (NSInteger index = 0; index < sectionTitlesCount; index++) {
NSMutableArray *array = [[NSMutableArray alloc] init];
[newSectionsArray addObject:array];
}
//将每个名字分到某个section下
for (PersonModel *personModel in _contactsArr) {
//获取name属性的值所在的位置,比如"林丹",首字母是L,在A~Z中排第11(第一位是0),sectionNumber就为11
NSInteger sectionNumber = [collation sectionForObject:personModel collationStringSelector:@selector(name)];
//把name为“林丹”的p加入newSectionsArray中的第11个数组中去
NSMutableArray *sectionNames = newSectionsArray[sectionNumber];
[sectionNames addObject:personModel];
}
//对每个section中的数组按照name属性排序
for (NSInteger index = 0; index < sectionTitlesCount; index++) {
NSMutableArray *personArrayForSection = newSectionsArray[index];
NSArray *sortedPersonArrayForSection = [collation sortedArrayFromArray:personArrayForSection collationStringSelector:@selector(name)];
newSectionsArray[index] = sortedPersonArrayForSection;
}
// //删除空的数组
// NSMutableArray *finalArr = [NSMutableArray new];
// for (NSInteger index = 0; index < sectionTitlesCount; index++) {
// if (((NSMutableArray *)(newSectionsArray[index])).count != 0) {
// [finalArr addObject:newSectionsArray[index]];
// }
// }
// return finalArr;
return newSectionsArray;
}
其中的PersonModel需自己定义,根据项目需要来定义。
php实现通讯录按字母分组,iOS - 通讯录开发,名字按拼音首字母分组排序相关推荐
- 简单实现通讯录中文名字按拼音首字母排序
<body> <div class="address"> <div class="address_title">通讯录< ...
- iOS searchbar实现汉字更具拼音首字母排序
最近在做一个地图相关的应用,涉及到全国城市的切换,于是打算把这个记录下来 用到的主要东西有:百度的全国城市列表,txt格式,jasonkit数据解析第三方,tableview,searchabar,汉 ...
- python提取首字母的函数_Oracle提取中文字符串拼音首字母函数
通过oracle的NLSSORT函数对汉字按照拼音排序,然后根据汉字的区间返回对应的首字母. 效果1,获取拼音简码: 效果2,获取姓名首字母: 创建函数: /* 获取拼音简码函数 */ CREATE ...
- php mysql 拼音首字母,Mysql应用MySQL查询汉字的拼音首字母实例教程
<Mysql应用MySQL查询汉字的拼音首字母实例教程>要点: 本文介绍了Mysql应用MySQL查询汉字的拼音首字母实例教程,希望对您有用.如果有疑问,可以联系我们. 导读:最好的方法还 ...
- 取汉字拼音首字母--生成不重复ID(汉字--拼音--首字母)
工作上需要生成一些不重复的Id,并且Id是固定前缀加客户拼音首字母相连产生的,如有重复,末尾加数字 首先是汉字转拼音的jar包 public String getUniqueAk(String cus ...
- mysql表中文字段提取拼音首字母最便捷实现,中文按拼音首字母排序
mysql表中文字段提取拼音首字母 SELECT a.提取字段, IFNULL(ELT(INTERVAL (CONV(HEX(left(CONVERT(a.提取字段 USING gbk), 1)), ...
- python汉字拼音首字母_python获_取一组汉字拼音首字母的方法
python获_取一组汉字拼音首字母的方法 发布时间:2017-09-28 22:10 来源:互联网 当前栏目:web技术类 本文实例讲述了python获取一组汉字拼音首字母的方法.分享给大家供大家参 ...
- android 获取拼音首字母,Android开发 - 汉字转拼音首字母
概述 工作中经常会遇到的一些排序问题,比如 按汉字的拼音首字母排序,比如人名排序等,就要用到下面的方法了,思路: 1.获得汉字 2.将汉字转换成首字母,并记录下(必要时保存到数据库) 3.按首字母进行 ...
- 通讯录c语言编程按字母分组,iOS - 通讯录开发,名字按拼音首字母分组排序
应项目需要,需添加一个自定义的通讯录,所以需要对联系人按名字的首字母进行排序.以下方法已经封装好,复制到项目中直接可以使用. 该方法是使用UILocalizedIndexedCollation来进行本 ...
最新文章
- 怎么扫描_打印机上扫描仪怎么用 打印机上扫描仪使用及添加方法
- linux中登录类型及配置文件
- 关于图片按比例自适应缩放
- 2021中青杯数学建模C题 在线教学的分析与研究
- 四川一级计算机课程编码,四川省计算机一级考试真题
- 检测是否是手机访问接口
- CIKM 2021 | 基于异质图学习的搜索广告关键词推荐
- C#中typeof 与GetType()的区别和methodinfo、memberinfo反射
- BlockChain:区块链入门课程 -- 区块链之类型 、应用程序、技术挑战和潜力
- python telnetlib详解 执行循环命令_Python3+telnetlib实现telnet客户端
- python26章_笨方法学Python-26章练习题
- 有监督学习 无监督学习
- Java简介:Java是什么?及Java语言的特点
- 天正双击墙体不能编辑_【盘点】CAD、天正、Ps 快捷键最全汇总!
- 论文阅读——Multi-scale Domain-adversarial Multiple-instance CNN for Cancer Subtype Classification
- 洛谷p1179数字统计
- linux运行360wifi,在Linux下使用“360随身WiFi 2”
- Emmagee—开源Android性能测试工具
- php苹果支付订阅付费_比较订阅,按错误付费和咨询软件业务模型
- (一)WaveDrom 数字时序图渲染引擎
热门文章
- 空间平面方程 java,【数学】 三维空间中圆的方程
- 15-02 | 一个关于唯一索引的业务场景
- 【Inpho精品教程】Inpho简介、安装教程(附Inpho8安装包下载)
- 利用 DTMaster 立体编辑 DEM 方法
- html5自适应 杂志模板,html5自适应,杂志模板.doc
- 面试官,不要再问我“Java虚拟机类加载机制”了
- 停车场管理系统python_Python简易版停车管理系统
- 数字优惠券市场现状研究分析报告 -
- windows下tomcat基本使用及jvm优化
- [清晖公开课合集】项目管理公开课,收藏