ios开发中,联系人列表是怎样通过名字排序分组的(支持中文排序)

在NSString有一个函数localizedCompare:,它的功能是通过自身与给定字符串的比较,返回一个本地化的比较结果,也就是说这个函数是支持汉字比较的。
    进一步localizedCompare:只是字符串与字符串的比较,我们要让NSArray数组通过按关键字为汉字字符串排序,我们继续在NSArray的SDK上下功夫,我们发现除了sortdArrayUsingDescriptors:通过NSSortDescriptor排序;还有sotedArrayUsingFunction:context:,这个函数支持我们自定义一个函数制定比较规则,返回比较结果,这样问题一下便解决了。

[cpp] view plaincopyprint?
NSInteger nickNameSort(id user1, id user2, void *context)  
{  
    User *u1,*u2;    
//类型转换  
    u1 = (User*)user1;  
    u2 = (User*)user2;  
    return  [u1.nickName localizedCompare:u2.nickName  
];  
}  

     在需要比较地方,调用比较函数

[cpp] view plaincopyprint?
sortArr = [arr sortedArrayUsingFunction:nickNameSort context:NULL];   

  这样做会有几方面的好处:1 支持多个汉字按字母序排序(若第一个字的第一个字母相同,则按第一个字的第二个字母比较,若第一个字的字母完全相同,按第二个字的首字母继续排序)。 2 原本可能需要保存汉字拼音的地方,现在不需要了。 3 可以通过对nickNameSortde进一步定制,完成更复杂的比较,比如先比较会员状态,在按姓名字母序完成比较。4 整体结构简单 使用的都是CocaTouch框架下的的方法。
例如:
    for ( NSString *key in _keys) {
        NSArray *arr = [dic objectForKey:key];
        //字典中的元素进行排序
        arr = [arr sortedArrayUsingFunction:nickNameSort context:NULL];
        [dic setObject:arr forKey:key];
    }


//中文排序
NSInteger nickNameSort(id user1, id user2, void *context)
{
    ContactsModel *u1,*u2;
    //类型转换
    u1 = (ContactsModel*)user1;
    u2 = (ContactsModel*)user2;
    return  [u1.modelName localizedCompare:u2.modelName
             ];
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值