介绍步骤
1需要创建NSArray数组A(用于排序)和NSMutableArray数组B(用于数据处理)
2从服务器获取带有名字的字典,字典转模型 模型转可变数组 目的是把获取的数据通过模型的方式存储
3处理可变数组(无序-->有序)遍历可变数组里的每个模型,取出名字,汉字转拼音,得到有序字典
4根据升降排序比较字典里的每个元素(之前已转成拼音的)
上代码
1 创建数组
self.addressBookArray= [NSMutableArray array];
self.dataArray= [[NSArray array];
2 字典转模型 模型转存于可变数组
AddressBookModel*model = [AddressBookModel mj_objectWithKeyValues:dict];
[self.addressBookArray addObject:model];
}
3 处理可变数组
NSMutableDictionary*dict = [NSMutableDictionarydictionary];
//遍历
for(AddressBookModel*modelinstrArray) {
//取出名字
NSString*nicknameStr = [NSStringstringWithFormat:@"%@", model.nickname];
HCLog(@"nicknameStr%@",nicknameStr);
if([nicknameStrlength]) {
NSMutableString*mutableStr = [[NSMutableStringalloc]initWithString:nicknameStr];
//汉字转拼音 因为我们是根据A-Z排序
if(CFStringTransform((__bridgeCFMutableStringRef)mutableStr,0,kCFStringTransformMandarinLatin,NO)) {
}
if(CFStringTransform((__bridgeCFMutableStringRef)mutableStr,0,kCFStringTransformStripDiacritics,NO)) {
NSString*str= [NSStringstringWithString:mutableStr];
str= [struppercaseString];
NSMutableArray*subArray = [dictobjectForKey:[strsubstringToIndex:1]];
if(!subArray) {
subArray = [NSMutableArrayarray];
//写入字典
[dictsetObject:subArrayforKey:[strsubstringToIndex:1]];}
[subArrayaddObject:model];}}}
return dict;
}
4 数组A的排序
NSString*letter1 = obj1;
NSString*letter2 = obj2;
if(NSSTRING_ISEMPTY(letter2)) {//降
return NSOrderedDescending;
}else if([letter1 characterAtIndex:0] < [letter2 characterAtIndex:0]) {//升
return NSOrderedAscending;}
return NSOrderedDescending;}];
至此 打印出来的_dataArray就是A-Z排序的 步骤3里返回值dict就是每一个字母内所有的名字了(如 A:A1,A2)
网友评论