按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同通讯录展示的方式分组排序的更多相关文章

  1. SQL语句分组排序,多表关联排序

    SQL语句分组排序,多表关联排序总结几种常见的方法: 案例一: 在查询结果中按人数降序排列,若人数相同,则按课程号升序排列? 分析:单个表内的多个字段排序,一般可以直接用逗号分割实现. select ...

  2. 本地化下按首字母分组排序的神器——UILocalizedIndexedCollation

    最近在整一个很简单的通讯录相关的项目,通讯录当然就少不了按首字母或者汉字拼音首字母分组排序索引.因为按照我一贯的的做法,都是想要做成更通用的.支持本地化的,所以这就纠结了,世界各地的语言啊我去,我顶多 ...

  3. mysql 分组排序前n + 长表转宽表

    MySQL数据库优化的八种方式(经典必看) 建表 CREATE TABLE if not EXISTS `bb` ( `id` int not null primary key auto_increm ...

  4. 在使用pandas 0.23.4对日期进行分组排序时报错

    date_df["rank_num"] = date_df.groupby("issuer_id").report_date.agg("rank&qu ...

  5. day36 03-Hibernate检索方式:排序、参数绑定、投影查询

    排序之后是分页查询. 检索单个对象 还可以进行参数的绑定. HQL的参数绑定,按参数名称绑定或者是按参数位置绑定. 还可以用投影的操作,投影的操作是只查询这里面的某几个属性.只查询某一个属性,查询多个 ...

  6. SQL分组排序后取每组最新一条数据的另一种思路

    在hibernate框架和mysql.oracle两种数据库兼容的项目中实现查询每个id最新更新的一条数据. 之前工作中一直用的mybatis+oracle数据库这种,一般写这类分组排序取每组最新一条 ...

  7. 一条Sql语句分组排序并且限制显示的数据条数

    如果我想得到这样一个结果集:分组排序,并且每组限定记录集的数量,用一条SQL语句能办到吗? 比如说,我想找出学生期末考试中,每科的前3名,并按成绩排序,只用一条SQL语句,该怎么写? 表[TScore ...

  8. oracle 分组排序函数

    项目开发中,我们有时会碰到需要分组排序来解决问题的情况:1.要求取出按field1分组后,并在每组中按照field2排序:2.亦或更加要求取出1中已经分组排序好的前多少行的数据 这里通过一张表的示例和 ...

  9. oracle中分组排序函数用法 - 转

    项目开发中,我们有时会碰到需要分组排序来解决问题的情况,如:1.要求取出按field1分组后,并在每组中按照field2排序:2.亦或更加要求取出1中已经分组排序好的前多少行的数据 这里通过一张表的示 ...

随机推荐

  1. mysql修改密码的三种方式

  2. Mysql基础(十一):流程控制结构、分支结构、循环结构

    流程控制结构 说明:顺序结构:程序从上往下依次执行分支结构:程序按条件进行选择执行,从两条或多条路径中选择一条执行循环结构:程序满足一定条件下,重复执行一组语句 分支结构 特点:1.if函数功能:实现 ...

  3. 数据可视化实例(八): 边缘直方图(matplotlib,pandas)

    https://datawhalechina.github.io/pms50/#/chapter6/chapter6 边缘直方图 (Marginal Histogram) 边缘直方图具有沿 X 和 Y ...

  4. 日志套餐篇 - log4j2 logback全量套餐

    日志套餐篇 - log4j2 logback全量套餐 前情提要: Log4j Log4j2 logback是当下主流的日志框架 slf4j则是新一代的日志框架接口,logback直接实现了slf4j接 ...

  5. Redis作为缓存可能会出现的问题及解决方案

    Redis是个大话题,只要是去面试Java开发,几乎必问.基础一点的问Redis是什么东西?用来做什么?Redis支持哪些数据类型?Redis的性能为什么那么好?复杂一点的就会问到缓存穿透.缓存击穿. ...

  6. MapReduce之自定义InputFormat

    在企业开发中,Hadoop框架自带的InputFormat类型不能满足所有应用场景,需要自定义InputFormat来解决实际问题. 自定义InputFormat步骤如下: (1)自定义一个类继承Fi ...

  7. Shell基本语法---for语句

    for语句 格式 ()for 变量名 in 值1 值2 值3 do 执行动作 done ()for 变量名 in `命令` do 执行动作 done ()for (( 条件 )) do 执行动作 do ...

  8. MySQL的权限赋予

    MySQL 赋予用户权限命令的简单格式可概括为:grant 权限 on 数据库对象 to 用户 一.grant 普通数据用户,查询.插入.更新.删除 数据库中所有表数据的权利. grant selec ...

  9. git常用命令操作

    git常用命令 #查看配置 git config -l #查看系统config git config --system --list #查看当前用户(global)配置 git config --gl ...

  10. npm ERR! This is probably not a problem with npm. There is likely additional logging output above.

    版本的问题 重新输入 npm install 再输入 npm run serve重启,如果还是不可以的话,在把之前装的都清空 依次输入以下命令 rm -rf node_modulesrm packag ...