demo3同通讯录展示的方式分组排序

按A-Z顺序分组展示
有些项目中会需要这样的需求。形成类似于上述的界面。类似于通讯录里边的排序。实现的效果:所有的数据展示的时候,能够分组展示。顺序按照A-Z的书序进行排列。如果不是以A-Z开头,则默认为#一列。
一般我们从服务器拿到的数据都是一个数组。里边包含了所有的数据。
思路:思路很重要!!!
我的思路详解:首先界面的话 1.需要组的名称。组的名称就是这些数据的首字母。所以说这里需要一个数组,来存储这个组的名字。sortedSectionTitles
2.就是每一组下边的数据的排序了。针对这个的实现我们需要一个字典originDic 这个字典的样子类似于:
{ “A”:["Alice","Asss","Addd"],
"B":["blose","Bob"]
}
的结构。
核心代码如下:
手动创建数据组
for (ACCellModel *model in originArray) {
//每一个模型中的开始的第一字母。
NSString *indexKey = [self indexTitleForName:model.nickName];
//创建一个数组用来接收
NSMutableArray *names = originDic[indexKey];
if (!names) {
names = [NSMutableArray array];
originDic[indexKey] = names;
}
[names addObject:model];
//应该在这里对名字再进行一下排序
[names sortUsingComparator:^NSComparisonResult(ACCellModel *obj1, ACCellModel *obj2) {
//按照名字进行排序
NSComparisonResult result = [obj1.nickName compare:obj2.nickName];
return result;
}];
}
//对源数据的key进行排序
sortedSectionTitles = [[originDic allKeys]sortedArrayUsingSelector:@selector(localizedCaseInsensitiveCompare:)];
#pragma mark - 返回nickname的首字母
- (NSString *)indexTitleForName:(NSString *)name {
static NSString *otherKey = @"#";
if (!name) {
return otherKey;
}
//那到首字母
NSMutableString *mutableString = [NSMutableString stringWithString:[name substringToIndex:1]];
CFMutableStringRef mutableStringRef = (__bridge CFMutableStringRef)mutableString;
CFStringTransform(mutableStringRef, nil, kCFStringTransformToLatin, NO);
CFStringTransform(mutableStringRef, nil, kCFStringTransformStripCombiningMarks, NO);
NSString *key = [[mutableString uppercaseString] substringToIndex:1];
unichar capital = [key characterAtIndex:0];
if (capital >= 'A' && capital <= 'Z') {
return key;
}
return otherKey;
}
其实思路蛮简单的。滤清了思路,决会觉得so easy。
如有任何疑问,请联系本作者邮箱:673658918@qq.com QQ:673658917 下方留言也可以。
请尊重劳动成果,转载请注明出处。谢谢合作。
厚积才能薄发。
我的博客即将搬运同步至腾讯云+社区,邀请大家一同入驻:https://cloud.tencent.com/developer/support-plan
demo3同通讯录展示的方式分组排序的更多相关文章
- SQL语句分组排序,多表关联排序
SQL语句分组排序,多表关联排序总结几种常见的方法: 案例一: 在查询结果中按人数降序排列,若人数相同,则按课程号升序排列? 分析:单个表内的多个字段排序,一般可以直接用逗号分割实现. select ...
- 本地化下按首字母分组排序的神器——UILocalizedIndexedCollation
最近在整一个很简单的通讯录相关的项目,通讯录当然就少不了按首字母或者汉字拼音首字母分组排序索引.因为按照我一贯的的做法,都是想要做成更通用的.支持本地化的,所以这就纠结了,世界各地的语言啊我去,我顶多 ...
- mysql 分组排序前n + 长表转宽表
MySQL数据库优化的八种方式(经典必看) 建表 CREATE TABLE if not EXISTS `bb` ( `id` int not null primary key auto_increm ...
- 在使用pandas 0.23.4对日期进行分组排序时报错
date_df["rank_num"] = date_df.groupby("issuer_id").report_date.agg("rank&qu ...
- day36 03-Hibernate检索方式:排序、参数绑定、投影查询
排序之后是分页查询. 检索单个对象 还可以进行参数的绑定. HQL的参数绑定,按参数名称绑定或者是按参数位置绑定. 还可以用投影的操作,投影的操作是只查询这里面的某几个属性.只查询某一个属性,查询多个 ...
- SQL分组排序后取每组最新一条数据的另一种思路
在hibernate框架和mysql.oracle两种数据库兼容的项目中实现查询每个id最新更新的一条数据. 之前工作中一直用的mybatis+oracle数据库这种,一般写这类分组排序取每组最新一条 ...
- 一条Sql语句分组排序并且限制显示的数据条数
如果我想得到这样一个结果集:分组排序,并且每组限定记录集的数量,用一条SQL语句能办到吗? 比如说,我想找出学生期末考试中,每科的前3名,并按成绩排序,只用一条SQL语句,该怎么写? 表[TScore ...
- oracle 分组排序函数
项目开发中,我们有时会碰到需要分组排序来解决问题的情况:1.要求取出按field1分组后,并在每组中按照field2排序:2.亦或更加要求取出1中已经分组排序好的前多少行的数据 这里通过一张表的示例和 ...
- oracle中分组排序函数用法 - 转
项目开发中,我们有时会碰到需要分组排序来解决问题的情况,如:1.要求取出按field1分组后,并在每组中按照field2排序:2.亦或更加要求取出1中已经分组排序好的前多少行的数据 这里通过一张表的示 ...
随机推荐
- python 爬虫由于网络或代理不能用导致的问题处理方法
平时在爬取某些网页的时候,可能是由于网络不好或者代理池中的代理不能用导致请求失败.此时有们需要重复多次去请求,python中有现成的,相应的包供我们使用: 我们可以利用retry模块进行多次请求,如果 ...
- 数据可视化实例(三): 散点图(pandas,matplotlib,numpy)
关联 (Correlation) 关联图表用于可视化2个或更多变量之间的关系. 也就是说,一个变量如何相对于另一个变化. 散点图(Scatter plot) 散点图是用于研究两个变量之间关系的经典的和 ...
- ASP.NET Core3.1使用Identity Server4建立Authorization Server
前言 网上关于Identity Server4的资料有挺多的,之前是一直看杨旭老师的,最近项目中有使用到,在使用.NET Core3.1的时候有一些不同.所以在此记录一下. 预备知识: https:/ ...
- bzoj3687简单题*
bzoj3687简单题 题意: 给个集合,求所有子集的元素和的异或和.集合元素个数≤1000,整个集合的元素和≤2000000 题解: 用bitset维护每个子集元素和的个数是奇数还是偶数.每次读入一 ...
- C# 接口与抽象类的区别? 情景下使用接口,什么情景下使用抽象类?
接口与抽象类的区别: 接口支持多继承:抽象类不能实现多继承. 接口可以用于支持回调:抽象类不能实现回调,因为继承不支持. 接口只包含方法.属性.索引器.事件的签名,但不能定义字段和包含实现的方法:抽象 ...
- 三个Python自动化测试高效工具的使用总结
##Python语言的特点 Python 是一个高层次的结合了解释性.编译性.互动性和面向对象的脚本语言. Python 的设计具有很强的可读性,相比其他语言经常使用英文关键字,其他语言的一些标点符号 ...
- Ethical Hacking - POST EXPLOITATION(2)
MAINTAINING ACCESS - Methods 1. Using a veil-evasion Rev_http_service Rev_tcp_service Use it instead ...
- STL源码剖析:仿函数
仿函数就是函数对象 函数对象: 重载了operator()的类对象 使用起来和普通函数一致,所以称为函数对象或是仿函数 STL中对于仿函数的参数进行了特殊处理,定义了两个特殊类,类里面只有类型定义 一 ...
- CCNA - Part11 - 隔离广播域的 VLAN 来了
之前在对交换机的介绍中,我们知道交换机的作用就是隔离广播域,在不需要跨网段传输时,在同一子网中转发数据包从而进行通信.实现的核心原理就是在交换机中拥有一张 MAC 表,记录了对应终端设备和接口之间的关 ...
- Netty 学习笔记(2) ------ 数据传输载体ByteBuf
Netty中读写以ByteBuf为载体进行交互 ByteBuf的结构 ByteBuf以readerIndex和writerIndex划分为三块区域,废弃字节,可读字节,可写字节.每次从ByteBuf读 ...