应项目需要,需添加一个自定义的通讯录,所以需要对联系人按名字的首字母进行排序。以下方法已经封装好,复制到项目中直接可以使用。

该方法是使用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 - 通讯录开发,名字按拼音首字母分组排序相关推荐

  1. 简单实现通讯录中文名字按拼音首字母排序

    <body> <div class="address"> <div class="address_title">通讯录< ...

  2. iOS searchbar实现汉字更具拼音首字母排序

    最近在做一个地图相关的应用,涉及到全国城市的切换,于是打算把这个记录下来 用到的主要东西有:百度的全国城市列表,txt格式,jasonkit数据解析第三方,tableview,searchabar,汉 ...

  3. python提取首字母的函数_Oracle提取中文字符串拼音首字母函数

    通过oracle的NLSSORT函数对汉字按照拼音排序,然后根据汉字的区间返回对应的首字母. 效果1,获取拼音简码: 效果2,获取姓名首字母: 创建函数: /* 获取拼音简码函数 */ CREATE ...

  4. php mysql 拼音首字母,Mysql应用MySQL查询汉字的拼音首字母实例教程

    <Mysql应用MySQL查询汉字的拼音首字母实例教程>要点: 本文介绍了Mysql应用MySQL查询汉字的拼音首字母实例教程,希望对您有用.如果有疑问,可以联系我们. 导读:最好的方法还 ...

  5. 取汉字拼音首字母--生成不重复ID(汉字--拼音--首字母)

    工作上需要生成一些不重复的Id,并且Id是固定前缀加客户拼音首字母相连产生的,如有重复,末尾加数字 首先是汉字转拼音的jar包 public String getUniqueAk(String cus ...

  6. mysql表中文字段提取拼音首字母最便捷实现,中文按拼音首字母排序

    mysql表中文字段提取拼音首字母 SELECT a.提取字段, IFNULL(ELT(INTERVAL (CONV(HEX(left(CONVERT(a.提取字段 USING gbk), 1)), ...

  7. python汉字拼音首字母_python获_取一组汉字拼音首字母的方法

    python获_取一组汉字拼音首字母的方法 发布时间:2017-09-28 22:10 来源:互联网 当前栏目:web技术类 本文实例讲述了python获取一组汉字拼音首字母的方法.分享给大家供大家参 ...

  8. android 获取拼音首字母,Android开发 - 汉字转拼音首字母

    概述 工作中经常会遇到的一些排序问题,比如 按汉字的拼音首字母排序,比如人名排序等,就要用到下面的方法了,思路: 1.获得汉字 2.将汉字转换成首字母,并记录下(必要时保存到数据库) 3.按首字母进行 ...

  9. 通讯录c语言编程按字母分组,iOS - 通讯录开发,名字按拼音首字母分组排序

    应项目需要,需添加一个自定义的通讯录,所以需要对联系人按名字的首字母进行排序.以下方法已经封装好,复制到项目中直接可以使用. 该方法是使用UILocalizedIndexedCollation来进行本 ...

最新文章

  1. 怎么扫描_打印机上扫描仪怎么用 打印机上扫描仪使用及添加方法
  2. linux中登录类型及配置文件
  3. 关于图片按比例自适应缩放
  4. 2021中青杯数学建模C题 在线教学的分析与研究
  5. 四川一级计算机课程编码,四川省计算机一级考试真题
  6. 检测是否是手机访问接口
  7. CIKM 2021 | 基于异质图学习的搜索广告关键词推荐
  8. C#中typeof 与GetType()的区别和methodinfo、memberinfo反射
  9. BlockChain:区块链入门课程 -- 区块链之类型 、应用程序、技术挑战和潜力
  10. python telnetlib详解 执行循环命令_Python3+telnetlib实现telnet客户端
  11. python26章_笨方法学Python-26章练习题
  12. 有监督学习 无监督学习
  13. Java简介:Java是什么?及Java语言的特点
  14. 天正双击墙体不能编辑_【盘点】CAD、天正、Ps 快捷键最全汇总!
  15. 论文阅读——Multi-scale Domain-adversarial Multiple-instance CNN for Cancer Subtype Classification
  16. 洛谷p1179数字统计
  17. linux运行360wifi,在Linux下使用“360随身WiFi 2”
  18. Emmagee—开源Android性能测试工具
  19. php苹果支付订阅付费_比较订阅,按错误付费和咨询软件业务模型
  20. (一)WaveDrom 数字时序图渲染引擎

热门文章

  1. 空间平面方程 java,【数学】 三维空间中圆的方程
  2. 15-02 | 一个关于唯一索引的业务场景
  3. 【Inpho精品教程】Inpho简介、安装教程(附Inpho8安装包下载)
  4. 利用 DTMaster 立体编辑 DEM 方法
  5. html5自适应 杂志模板,html5自适应,杂志模板.doc
  6. 面试官,不要再问我“Java虚拟机类加载机制”了
  7. 停车场管理系统python_Python简易版停车管理系统
  8. 数字优惠券市场现状研究分析报告 -
  9. windows下tomcat基本使用及jvm优化
  10. [清晖公开课合集】项目管理公开课,收藏