iOS实现联系人按照首字母进行排序的实例
联系人功能的需求一般都会有按照首字母排序,并且会要求同一个姓的就要连续起来中间不能穿插别的姓,百度了一下看到UILocalizedIndexedCollation给我们提供了很方便的排序方法,它不需要将中文转为拼音,但是有一个缺点就是如果姓氏存在多音字就无法区分(例如:姓增,它会被分配到C(ceng)组)
下面贴代码:
1,建一个类进行管理LinkManSort
.m文件
NSString*constCYPinyinGroupResultArray=@”CYPinyinGroupResultArray”;
NSString*constCYPinyinGroupCharArray=@”CYPinyinGroupCharArray”;
@implementationLinkManSort
//按首字母分组排序数组+(NSDictionary)sortObjectsAccordingToInitialWith:(NSArray)willSortArrSortKey:(NSString*)sortkey{
//初始化UILocalizedIndexedCollation UILocalizedIndexedCollation*collation=[UILocalizedIndexedCollationcurrentCollation]; //得出collation索引的数量,这里是27个(26个字母和1个#) NSIntegersectionTitlesCount=[[collationsectionTitles]count]; //初始化一个数组newSectionsArray用来存放最终的数据,我们最终要得到的数据模型应该形如@[@[以A开头的数据数组],@[以B开头的数据数组],@[以C开头的数据数组],...@[以#(其它)开头的数据数组]] NSMutableArray*newSectionsArray=[[NSMutableArrayalloc]initWithCapacity:sectionTitlesCount]; //初始化27个空数组加入newSectionsArray for(NSIntegerindex=0;index}
+(NSArray)SortFirstChar:(NSArray)firstChararry{
//数组去重复 NSMutableArray*noRepeat=[[NSMutableArrayalloc]initWithCapacity:8]; NSMutableSet*set=[[NSMutableSetalloc]initWithArray:firstChararry]; [setenumerateObjectsUsingBlock:^(idobj,BOOL*stop){ [noRepeataddObject:obj]; }]; //字母排序 NSArray*resultkArrSort1=[noRepeatsortedArrayUsingComparator:^NSComparisonResult(idobj1,idobj2){ return[obj1compare:obj2options:NSNumericSearch]; }]; //把”#“放在最后一位 NSMutableArray*resultkArrSort2=[[NSMutableArrayalloc]initWithArray:resultkArrSort1]; if([resultkArrSort2containsObject:@"#"]){ [resultkArrSort2removeObject:@"#"]; [resultkArrSort2addObject:@"#"]; } returnresultkArrSort2;}
.h文件
先引入框架UIKit/UIKit.h/***获取model数组*/UIKIT_EXTERNNSString*constCYPinyinGroupResultArray;
/***获取所包函字母的数组*/UIKIT_EXTERNNSString*constCYPinyinGroupCharArray;@interfaceLinkManSort:NSObject+(NSDictionary)sortObjectsAccordingToInitialWith:(NSArray)willSortArrSortKey:(NSString*)sortkey;
在VC里面调用
NSArray*arr=@[@{@”name”:@”李立”},@{@”name”:@”李安”},@{@”name”:@”刘星”},@{@”name”:@”刘小米”},@{@”name”:@”苏音”},@{@”name”:@”韦佳佳”},@{@”name”:@”李华”},@{@”name”:@”杨波”},@{@”name”:@”陈恒”},@{@”name”:@”黄呀呀”},@{@”name”:@”邱珀”},@{@”name”:@”李克”},@{@”name”:@”123456”},@{@”name”:@”韦立林”},@{@”name”:@”陈瑶”}];
NSMutableArray*marr=[NSMutableArrayarrayWithCapacity:10]; for(NSDictionary*dictinarr){ PersonModel*model=[[PersonModelalloc]init];//dict[@"name"]; model.name=dict[@"name"]; [marraddObject:model]; }NSDictionary*dcit=[LinkManSortsortObjectsAccordingToInitialWith:marrSortKey:@”name”];
NSArray*resultarr1=dcit[CYPinyinGroupResultArray];//排好顺序的PersonModel数组 NSArray*resultarr2=dcit[CYPinyinGroupCharArray];//排好顺序的首字母数组完成啦!
以上这篇iOS实现联系人按照首字母进行排序的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。