【iOS开发】---- 通讯录字典序

       最近项目中有个客户列表,需要对客户(Customer)做字典序排列且按A~Z~#分组展示。下面记录了我的实现方法(如果你有更好的方法,请不吝分享):

       最终目标:
       获得一个字典dic{key:value,…},
       key:A~Z和#,
       value:是一个数组,存储customer对象,对象按名称字典序排列。
       实现步骤:
       1.获取客户列表数据,进行json解析时将客户名称转拼音(且均转为大写)给Customer对象存储,解析完成得到存储Customer对象的数组customersArray;
       汉字转拼音加强版:http://www.cnblogs.com/tuhaoYY/p/3850799.html
       2.对customersArray进行排序,让Customer对象以字典序排列,得到排序后的数组customersSortedArray(我这里得到的顺序是按照#~A~Z排列的);
       数组的排序方法:http://beyondvincent.com/blog/2014/01/26/how-to-sort-nsarray-with-custom-objects/(这里我采用的使用selector进行排序

       3.定义一个包含26个大写字母的数组:AtoZ,定义一个可变字典dic(最终展示要用到的就是这个了)。遍历customersSortedArray,如果首字母firstLetter包含在AtoZ中,从dic中获取以键为firstLetter数组(如数组不存在,则创建它),将客户添加到此数组中;如果首字母firstLetter不包含在AtoZ中,从dic中获取以键为’#’数组(如数组不存在,则创建它),将客户添加到此数组中(由于早已对客户进行了字典排序,所以在这里添加到数组之后任然是字典序)。 代码实现如下:
 for (int i = 0; i < [arr count]; i++)
    {
        Customer *cstr= arr[i];
        NSString *firstLetter = [[NSString stringWithFormat:@"%c",[cstr.phonetic characterAtIndex:0]] uppercaseString];
        NSString *key = [AtoZ containsObject:firstLetter] ? firstLetter : @"#";

        NSMutableArray *arrStartWithKey = mDic[key];
        if (!arrStartWithKey) {
            arrStartWithKey = [[NSMutableArray alloc] init];
            [mDic setObject:arrStartWithKey forKey:key];
            [arrStartWithKey release];
        }
        [arrStartWithKey addObject:cstr];
    }

       4.将获得的数据dic展示在界面即可。

       这里有点不完善的地方,就是多音字,上面在转拼音过程中,有个加强版,但也只能解决少许问题,这个比较麻烦,暂时还没有解决办法,如果你有解决办法,请分享一下,谢谢~
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值