需求:
最近在做企业通讯录,要求支持按照部门展示+按照拼音展示,同时能够获得某部门下面所有的人。
原型:
略
返回数据:
以下是返回数据的部分结构
@property (nonatomic, assign) NSInteger type;//0:员工;1:部门
@property(nonatomic,strong) NSString *name;
@property(nonatomic,strong) NSString *ID;
@property(nonatomic,strong)NSString *parentName;//type=0员工所在部门名称 type=1上级部门名称
@property(nonatomic,strong)NSString *parentId;//type=0员工所在部门ID type=1上级部门ID
@property(nonatomic,strong)NSString *mobilePhone;//移动电话
.
.
根据返回数据,还原出来大概是这么一个结构:
根据返回数据,还原出来大概是这么一个结构:
我的解决方法
大体思路是:给部门跟成员增加一个countOfPerson字段,用来记录成员个数。在第一次获得数据的时候就计算得到相关信息。以后根据部门ID,直接从数据库得到遍历得到该级下面的部门+人;
计数问题:
1.给成员增加字段countOfPerson,解析的时候,成员countOfPerson =1;部门countOfPerson =0;
2.建立公司结构CompanyStructure,包含两个成员
@property(nonatomic,strong)NSMutableArray *allDepartments;
@property(nonatomic,strong)NSMutableArray *allPersonInfo;
3.按照类型,将解析得到的数据添加到CompanyStructure,按照拼音对部门跟成员分别排序。
4.遍历成员,对包含该成员的所有上级部门的人员计数+1
5.要获得某部门下面的信息,则只需要遍历allDepartments+allPersonInfo;(定义了一个Node来做这个操作)
按照拼音分组:
1.建立一个PinyinStructureNode,用来保存某字母 下面的所有成员;建立一个PinyinStructure,alphaIndexDic用来保存字母对应的PinyinStructureNode的位置
@interface PinyinStructure : NSObject
@property(nonatomic,strong) NSMutableDictionary *alphaIndexDic;
//所有分组
@property(nonatomic,strong)NSMutableArray *groups;
-(instancetype)initPinyinStructureWithPersonList:(NSMutableArray*)personList;
@end
//拼音节点
@interface PinyinStructureNode : NSObject
@property(nonatomic,strong) NSString *alphaKey;
@property(nonatomic,strong)NSMutableArray *persons;
-(instancetype)initNodeWithPerson:(EmployeeInfo*)info;
-(void)addPerson:(EmployeeInfo*)info;
@end
原文:http://www.cnblogs.com/pjzdd/p/4932225.html