美文网首页
IOS通讯录分组排序

IOS通讯录分组排序

作者: dushuzhong | 来源:发表于2017-12-06 14:36 被阅读13次

###################### 测试代码 ##########################
NSArray *sortArray = @[@"du",@"zhong",@"dulibai",@"shu",@"杜树忠"];
NSMutableArray *userModels = [NSMutableArray array];
for (NSString *name in sortArray) {
// User *user = [User new];
// user.name = name;
[userModels addObject:name];
}

NSMutableArray *list = [self sortArray:sortArray];

//NSArray *sortedArray = [userModels sortedArrayUsingFunction:nickNameSort context:NULL];

// for (User *user in sortedArray) {
// NSLog(@"%@",user.name);
// }

for (NSString *user in list) {
    NSLog(@"%@",user);
}

############### 功能代码 ###################

  • (NSMutableArray*)sortArray:(NSArray *)toSortArray{
    //将传入数组转换为可变数组
    NSMutableArray *needSortArray = [NSMutableArray arrayWithArray:toSortArray];
    //存储对应字母开头的所有数据的数组
    NSMutableArray *classifiedArray = [[NSMutableArray alloc] init];

    for(int i='A';i<='Z';i++){
    NSMutableArray *rulesArray = [[NSMutableArray alloc] init];
    NSString *indexString = [NSString stringWithFormat:@"%c",i];
    for(int j = 0; j < needSortArray.count; j++){
    User *model = [needSortArray objectAtIndex:j];
    //NSString *model = [needSortArray objectAtIndex:j];

          if([[self toPinyin: model] isEqualToString:indexString]){
              //把model.name首字母相同的放到同一个数组里面
              [rulesArray addObject:model];
              [needSortArray removeObject:model];
              j--;
          }
      }
      if (rulesArray.count !=0) {
          [classifiedArray addObject:rulesArray];
      }
      
      if (needSortArray.count == 0) {
          break;
      }
    

    }

    // 剩下的就是非字母开头数据,加在classifiedArray的后面
    if (needSortArray.count !=0) {
    [classifiedArray addObject:needSortArray];
    }

    //最后再分别对每个数组排序
    NSMutableArray *sortCompleteArray = [NSMutableArray array];
    for (NSArray *tempArray in classifiedArray) {
    NSArray *sortedElement = [tempArray sortedArrayUsingFunction:nickNameSort context:NULL];
    [sortCompleteArray addObject:sortedElement];
    }
    //sortCompleteArray就是最后排好序的二维数组了
    return sortCompleteArray;
    }

  • (NSString *)toPinyin:(NSString *)str{
    NSMutableString *ms = [[NSMutableString alloc]initWithString:str];
    if (CFStringTransform((__bridge CFMutableStringRef)ms, 0,kCFStringTransformMandarinLatin, NO)) {
    }
    // 去除拼音的音调
    if (CFStringTransform((__bridge CFMutableStringRef)ms, 0,kCFStringTransformStripDiacritics, NO)) {
    if (str.length) {
    NSString *bigStr = [ms uppercaseString];
    NSString *cha = [bigStr substringToIndex:1];
    return cha;
    }
    }
    return str;
    }

相关文章

网友评论

      本文标题:IOS通讯录分组排序

      本文链接:https://www.haomeiwen.com/subject/fuakixtx.html