美文网首页iOS 开发iOS
UILocalizedIndexedCollation通讯录分组

UILocalizedIndexedCollation通讯录分组

作者: 一蓑烟雨满眼风波 | 来源:发表于2017-01-03 13:35 被阅读29次

    UILocalizedIndexedCollation 可以对数组重建索引,按照首字母顺序进行排序。

    LCIndexTool.h

    #define kToolsIndexAryKey @"LCIndexAryKey"     //索引
    #define kToolsGroupAryKey @"LCGroupAryKey"  //排序后的分组
    
    /**
     对数组排序
    
     @param mArray      需要排序的数组
     @param proretyName 数组中对象需要排序的属性
    
     @return 排序后的索引及gourpAry 字典形式 kToolsIndexAryKey kToolsGroupAryKey
     */
    + (NSDictionary *)sortedArrayWithChineseObject:(NSMutableArray *)mArray  withPropertyNameSEL:(SEL)nameSEL ;
    

    proretyName为属性名称例如:
    Person 类 属性 :name age phoneNumber
    我们需要根据name的首字母来排序分组 则传递@selector(name)

    LCIndexTool.m

    //数组排序
    + (NSDictionary *)sortedArrayWithChineseObject:(NSMutableArray *)mArray  withPropertyNameSEL:(SEL)nameSEL {
        
        UILocalizedIndexedCollation *indexCollation = [UILocalizedIndexedCollation currentCollation];
        NSInteger index, sectionTitlesCount = [[indexCollation sectionTitles] count];
        NSMutableArray *suoYinArr = [[NSMutableArray alloc] initWithArray:[indexCollation sectionTitles]];
        
        //临时数据,存放section对应的userObjs数组数据
        NSMutableArray *newSectionsArray = [[NSMutableArray alloc] initWithCapacity:sectionTitlesCount];
        
        //设置sections数组初始化:元素包含userObjs数据的空数据
        for (index = 0; index < sectionTitlesCount; index++) {
            NSMutableArray *array = [[NSMutableArray alloc] init];
            [newSectionsArray addObject:array];
        }
      
        //分组
        for (id object in mArray) {
            //根据timezone的localename,获得对应的的section number
            NSInteger sectionNumber = [indexCollation sectionForObject:object collationStringSelector:nameSEL];
            //根据sectionNumber获取数组
            NSMutableArray *sectionUserObjs = [newSectionsArray objectAtIndex:sectionNumber];
            //添加对象到对应的数组中
            [sectionUserObjs addObject:object];
        }
        
        //获取空的数组的index
        NSMutableArray *willDeleteAry = [NSMutableArray new];
        for (int i = 0; i < newSectionsArray.count; i ++) {
            NSArray *tempAry = newSectionsArray[i];
            if (tempAry.count == 0) {
                [willDeleteAry addObject:[NSString stringWithFormat:@"%d",i]];
            }
        }
        //删除空的数组
        for (NSInteger i = willDeleteAry.count; i > 0; i -- ) {
            NSInteger index = [willDeleteAry[i - 1] integerValue];
            [newSectionsArray removeObjectAtIndex:index];
            [suoYinArr removeObjectAtIndex:index];
        }
        
        //该字典中存放分组排序呢后的索引及数据
        NSDictionary *dict = @{kToolsGroupAryKey:newSectionsArray,kToolsIndexAryKey:suoYinArr};
        
    
        return dict;
    
    }
    

    相关文章

      网友评论

        本文标题:UILocalizedIndexedCollation通讯录分组

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