ios开发中,联系人列表是怎样通过名字排序分组的(支持中文排序)
2016-03-18 13:12
609 查看
在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 ]; }
相关文章推荐
- IOS项目自动生成技术文档很方便实用
- iOS模拟Tom猫的简单界面
- iOS下bound,center和frame
- iOS cocoapods的详解大全及其flex
- iOS8之后CoreLocation定位的使用
- 理清关于iOS各个证书的关系以及作用
- iOS多线程之NSThread
- iOS中数据存储的几种代码实现
- IOS 设置label中划线、下划线
- index++和index+1严重区别
- iOS分类中通过runtime添加动态属性
- iOS 之 安装pods 项目配置 及删除项目中的pods
- iOS开发之蓝牙通信
- ios 证书无法生成p12 文件解决,或者无法生成秘钥
- ios 数据持久化的四种方式
- 写给 iOS 开发者的 Hopper + lldb 简介
- 写给 iOS 开发者的 Hopper + lldb 简介
- iOS:iOS开发系列–打造自己的“美图秀秀”(下)
- iOS之GCD简单了解使用
- Ios之正则表达式详解