ios 汉字转拼音

 其中用到PinYin4Objc第三方    下载地址:    https://github.com/kimziv/PinYin4Objc

          

项目中的实际应用

项目需求:

显示一个班级的成员列表,有一个是管理员要排在最上面,下面按照拼音排序实现索引列表,效果图如下:

 

代码实现过程

查询数据库获取成员列表

1 //成员列表根据 isAdmin 字段进行排序查询——order by isAdmin
2 NSMutableArray *members = [[ASMemberDao sharedInstance] queryAllMembersByGroupId:groupId];
3 //根据排序查询结果第一个为管理员
4 ASContact *memeberAdmin = [members objectAtIndex:0];

将每个成员的名字转化成拼音

复制代码
 1 //初始化HanyuPinyinOutputFormat对象,设置相应的 type
 2 HanyuPinyinOutputFormat *outputFormat=[[HanyuPinyinOutputFormat alloc] init];
 3 [outputFormat setToneType:ToneTypeWithoutTone];
 4 [outputFormat setVCharType:VCharTypeWithV];
 5 [outputFormat setCaseType:CaseTypeUppercase];
 6 //遍历成员列表,将成员名字 contactName 转成拼音,并存放到 categoryName 字段中,用于排序
 7 [members enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
 8     ASContact *contact = (ASContact *)obj;
 9     NSString *outputPinyin=[PinyinHelper toHanyuPinyinStringWithNSString:contact.contactName withHanyuPinyinOutputFormat:outputFormat withNSString:@""];
10     contact.categoryName = [outputPinyin uppercaseString];
11 }];
12 [outputFormat release];
复制代码

将成员列表按照拼音字段 categoryName进行排序

1 NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"categoryName" ascending:YES];
2 NSArray *array = [[NSArray alloc] initWithObjects:sortDescriptor, nil];
3 [members sortUsingDescriptors:array];
4 [array release];
5 [sortDescriptor release];

定义一个全局变量 dataDictionary 来组织数据结构

key: 将汉字转完拼音后的第一个字母, 也就是上图 section 中的 A、B、C...

value: 是一个成员数组,存放每个 section 下的成员列表

如上图: A 是字典的一个 Key, 对应的 value 就是成员数组 {af1, af10},当然数组中存放的是成员对象。

复制代码
 1 dataDictionary = [[NSMutableDictionary alloc] init];
 2 //存放每个 section 下的成员数组
 3 NSMutableArray *currentArray = nil;
 4 //用于获取拼音中第一个字母
 5 NSRange aRange = NSMakeRange(0, 1);
 6 NSString *firstLetter = nil;
 7 //遍历成员列表组织数据结构
 8 for (ASContact *contact in members) {
 9     //如果是管理员,则暂时不放如 dataDictionary 中
10     if (contact.isAdmin == 1) {
11          continue;
12     }
13     //获取拼音中第一个字母,如果已经存在则直接将该成员加入到当前的成员数组中,如果不存在,创建成员数据,添加一个 key-value 结构到 dataDictionary 中
14     firstLetter = [contact.categoryName substringWithRange:aRange];
15     if ([dataDictionary objectForKey:firstLetter] == nil) {
16         currentArray = [NSMutableArray array];
17         [dataDictionary setObject:currentArray forKey:firstLetter];
18     }
19     [currentArray addObject:contact];
20 }
复制代码

在定义一个全局变量 allKeys 用于显示索引列表中索引

1 //取出 dataDictionary 中的 key 并进行排序
2 allKeys = [[NSMutableArray alloc] initWithArray:[[dataDictionary allKeys] sortedArrayUsingFunction:sortObjectsByKey context:NULL]];
3 //然后将管理员加入到排好序 allKeys 的最前面
4 [allKeys insertObject:@"管理员" atIndex:0];
5 [dataDictionary setObject:[NSArray arrayWithObjects:contactAdmin, nil] forKey:@"管理员"];

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值