文档章节

iOS多级树结构的遍历

pjzdd
 pjzdd
发布于 2015/10/16 10:10
字数 481
阅读 80
收藏 0

需求:

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

原型:

    略

返回数据:

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

@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

© 著作权归作者所有

共有 人打赏支持
pjzdd
粉丝 0
博文 2
码字总数 602
作品 0
杭州
UIViewControllerHierarchyInconsistencyException异常

IOS中的MVC MVC模式是一种经典的软件架构模式,基本上懂程序设计的人都了解或应用过MVC模式。多数面向对象的程序设计架构都得益于MVC模式来有效的划分程序中的对象的角色,组织对象之间的耦合...

big军
2013/01/10
0
0
iOS商城demo、音乐播放器、视频通话、自定义搜索、转场动画等源码

iOS精选源码 微信自定义搜索框实现(http://www.code4app.com/thread-13182-1-1.html) 一个商城Demo,持续更新中(http://www.code4app.com/thread-13957-1-1.html) 在Object-C中学习数据结构与...

sunnyaigd
07/03
0
0
从零开始学习Gradle之三---多项目构建

随着信息化的快速发展,IT项目变得越来越复杂,通常都是由多个子系统共同协作完成。对于这种多系统、多项目的情况,很多构建工具都已经提供 了不错的支持,像maven、ant。Gradle除了借鉴了a...

疯狂的兔子
2014/12/01
0
0
iOS使用Objective-c自定义cordova插件(-)

本系列教程为博主初次使用开发,内容如有差错,欢迎指正,敬请谅解。 博客地址:http://blog.img421.com/iosshi-yong-object-czi-ding-yi-cordovacha-jian/ Mac安装ionic和cordova我们已经熟悉,...

Michaelyn
2017/10/23
0
0
IOS下WEBVIEW 的javascript数组与json定义 及交互

最近在折腾IOS新闻浏览客户端,当中需要用到webview传递JSON数据到IOS上,然后在IOS上解析。刚入门IOS不久,看了不少的书,但都是囫囵吞枣。在开发过程中,遇到不少问题。 开发环境 mac mini...

GIFCOOL
2013/08/20
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

iOS开发用到的图片尺寸汇总

启动图 型号 竖屏 横屏 iPhone SE 640px × 1136px 1136px × 640px iPhone 6s 750px × 1334px 1334px × 750px iPhone 6s Plus 1242px × 2208px 2208px × 1242px iPhone 7 750px × 1334......

业界小白
16分钟前
0
0
浅谈redis

redis是一个开源,内存式的健值存储数据库,也被称为健值存储的字典服务器。健值类型有字符串,hash(哈希类型),set(集合),list(列表) 和有序集合 特征细节: 内存式:redis将健值存储在主...

拐美人
23分钟前
0
0
无限扩容,按需使用!ZStack推出基于阿里云NAS的文件存储服务

日前,ZStack发布2.6.0版本,正式宣布推出基于阿里云NAS的文件存储服务。得益于业界领先的阿里云分布式存储架构,融合NAS后的ZStack 2.6.0拥有高性能、高可靠、容量无限扩展、一键操作、按需...

ZStack社区版
25分钟前
1
0
崛起于Springboot2.X之Mongodb多数据源处理(35)

多数据源:4个mongodb库! 目录结构图: 1、添加pom依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-mongodb</artifactId>......

木九天
31分钟前
0
0
如何获取显示器的EDID信息

Q1: 为什么要写这篇文章? A1:在最近的工作中遇到了不少问题,其中很多都是和EDID相关的。可以说,作为一家以“显示”为生的企业,我们时时刻刻在与EDID打交道。EDID这东西很简单,但是如果...

DB_Terrill
32分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部