iOS多级树结构的遍历
博客专区 > pjzdd 的博客 > 博客详情
iOS多级树结构的遍历
pjzdd 发表于3年前
iOS多级树结构的遍历
  • 发表于 3年前
  • 阅读 73
  • 收藏 0
  • 点赞 0
  • 评论 0

移动开发云端新模式探索实践 >>>   

摘要: iOS多级树结构的遍历

需求:

    最近在做企业通讯录,要求支持按照部门展示+按照拼音展示,同时能够获得某部门下面所有的人。

原型:

    略

返回数据:

以下是返回数据的部分结构

@property (nonatomicassignNSInteger type;//0:员工;1:部门

@property(nonatomic,strongNSString *name;

@property(nonatomic,strongNSString *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,strongNSMutableDictionary *alphaIndexDic;

//所有分组

@property(nonatomic,strong)NSMutableArray *groups;


-(instancetype)initPinyinStructureWithPersonList:(NSMutableArray*)personList;


@end


//拼音节点


@interface PinyinStructureNode : NSObject


@property(nonatomic,strongNSString *alphaKey;


@property(nonatomic,strong)NSMutableArray *persons;


-(instancetype)initNodeWithPerson:(EmployeeInfo*)info;

-(void)addPerson:(EmployeeInfo*)info;


@end

  • 打赏
  • 点赞
  • 收藏
  • 分享
共有 人打赏支持
粉丝 0
博文 2
码字总数 602
×
pjzdd
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: