通讯录排序

2019/1/10 posted in  iOS

苹果提供的排序方法

NSArray *stringArr = @[@"我们",@"我的", @"重点", @"重庆",  @"三"]; 
NSArray *result = [stringArr sortedArrayUsingSelector:@selector(localizedCompare:)];

字典当中的keyvalue 可以一个键对应一个数组。

对数据进行排列按首字母进行分组

这是苹果的方法

    
    for ( modelAgreementCitizenItem *model in modelArr) {
        //获取汉子的首字母
        //把中文转拼音
        
        NSMutableString *ms = [[NSMutableString alloc] initWithString:[model patientName]];
        if (CFStringTransform((__bridge CFMutableStringRef)ms, 0, kCFStringTransformMandarinLatin, NO)) {
            NSLog(@"Pingying: %@", ms);
        }
        if (CFStringTransform((__bridge CFMutableStringRef)ms, 0, kCFStringTransformStripDiacritics, NO)) {
            NSLog(@"Pingying: %@", ms);
        }
        NSString *firstString = [[ms substringToIndex:1] uppercaseString];
        
        
        NSMutableArray * arr = [self.nameDic objectForKey:firstString];
        if (arr) {
            [arr addObject:model];
        }else{//如果没有 则需要创建一个添加到里面
            [self.nameDic setObject:[@[model] mutableCopy] forKey:firstString];
        }
        
    }
    
}

这个方法使用起来比较慢 耗时较长

    
    NSMutableArray *array = [[NSMutableArray alloc] init];
    if(self.indexArr.count){
        [self.indexArr removeAllObjects];
    }
    
    for(int i='A';i<='Z';i++)
    {
        NSMutableArray *rulesArray = [[NSMutableArray alloc] init];
        
        NSString *str1=[NSString stringWithFormat:@"%c",i];
        for(int j=0;j<modelArr.count;j++)
        {
            modelAgreementCitizenItem *model = [modelArr objectAtIndex:j];  //这个model 是我自己创建的 里面包含用户的姓名 手机号 和 转化成功后的首字母
            
            if([[NSString getFirstLetter:model.patientName] isEqualToString:str1])
            {
                [rulesArray addObject:model];    //把首字母相同的人物model 放到同一个数组里面
                [modelArr removeObject:model];   //model 放到 rulesArray 里面说明这个model 已经拍好序了 所以从总的modelArr里面删除
                j--;
                
            }else{
                
            }
        }
        if (rulesArray.count !=0) {
            [array addObject:rulesArray];
            [self.indexArr addObject:[NSString stringWithFormat:@"%c",i]]; //把大写字母也放到一个数组里面
        }
    }
    
    if (modelArr.count !=0) {
        [array addObject:modelArr];
        [self.indexArr addObject:@"#"];  //把首字母不是A~Z里的字符全部放到 array里面 然后返回
    }
    
    return array;
    
}