CN104102694B - 树形节点排序方法和树形节点排序装置 - Google Patents
树形节点排序方法和树形节点排序装置 Download PDFInfo
- Publication number
- CN104102694B CN104102694B CN201410289591.9A CN201410289591A CN104102694B CN 104102694 B CN104102694 B CN 104102694B CN 201410289591 A CN201410289591 A CN 201410289591A CN 104102694 B CN104102694 B CN 104102694B
- Authority
- CN
- China
- Prior art keywords
- menu
- dictionary table
- data
- tree
- node
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
- G06F16/2228—Indexing structures
- G06F16/2246—Trees, e.g. B+trees
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明提出了一种树形节点排序方法和树形节点排序装置,其中,树形节点排序方法包括:根据菜单列表数据中菜单的编号对所述菜单列表数据进行排序;根据所述菜单列表数据中菜单的父标识与菜单的所述编号对排序后的所述菜单列表数据进行重新排序;将重新排序后的所述菜单列表数据转化为树形结构数据,以根据所述树形结构数据检索对应的父节点和子节点;根据所述父节点与所述子节点对所述树形结构数据逐层展开,并将展开后的数据转化为目标菜单列表数据。通过发明的本技术方案,可以大大地缩短树形结构数据的排序时间,同时减少了递归程序的应用,极大地加快了排序速度,并有效地提高用户的排序体验。
Description
技术领域
本发明涉及排序技术领域,具体而言,涉及一种树形节点排序方法和一种树形节点排序装置。
背景技术
在实际应用中,树形数据结构的使用是十分广泛的。例如,中国军队的三三编制就是一种典型的树形数据结构:三个连为一个团,三个团为一个师。又例如,大多数公司的组织结构也是树形数据结构:一个项目经理带领若干项目成员,一个项目主管又带领若干个项目经理。
目前,在使用数据库进行数据存储时,对于具有树形存储结构的数据,通常多采用父子节点的存储方法即每一个节点都存在一ID标识及父标识SupID,而目前对具有树形存储结构的数据的排序很慢。下面将以菜单为例,说明目前的树形存储结构的数据排序方法,目前常用的排序方法是将列表式数据结构通过递归变化成树形数据结构,再通过递归遍历此树中同一个父菜单,同时,同一层菜单下的数据还要通过其iOrder(菜单编号)来排序。总体看来,这种排序方式导致花费大量时间对同一父菜单下的子菜单进行排序,进一步造成递归程序的大量使用,极大地降低了排序速度,例如,一个拥有3500+的菜单的排序时间会在15秒以上,这大大地降低了用户的使用体验。
因此,如何加快菜单等树形存储结构的数据的排序速度,减短排序时间,提高用户体验成为亟待解决的问题。
发明内容
本发明正是基于上述问题,提出了一种新的技术方案,可以提高菜单等树形存储结构的数据的排序速度,减短排序时间,提高用户体验。
有鉴于此,本发明的一方面提出了一种树形节点排序方法,包括:根据菜单列表数据中菜单的编号对所述菜单列表数据进行排序;根据所述菜单列表数据中菜单的父标识与菜单的所述编号对排序后的所述菜单列表数据进行重新排序;将重新排序后的所述菜单列表数据转化为树形结构数据,以根据所述树形结构数据检索对应的父节点和子节点;根据所述父节点与所述子节点对所述树形结构数据逐层展开,并将展开后的数据转化为目标菜单列表数据。
在该技术方案中,通过对排序后的菜单列表数据进行重新排序,这样菜单列表数据被组装成树形结构数据时,就可以按顺序从菜单列表数据取数据,不需要再递归遍历树形结构数据中同一个父菜单,这大大地缩短了组装树形结构数据的时间,同时减少了递归程序的应用,极大地加快了排序速度,缩短了排序时间,可以有效地提高用户的排序体验。
在上述技术方案中,优选地,还包括:将重新排序后的所述菜单列表数据转化为树形结构数据,具体包括:根据重新排序后的所述菜单列表数据,建立字典表,并向所述字典表中添加所述菜单列表数据中的菜单,以及在所述字典表添加完成时,根据字典表标识逐层获取所述字典表中的所述菜单列表数据,并将所述菜单列表数据转化为所述树形结构数据。
在该技术方案中,由于从字典表中取数据时间是递归减半的,且字典表中有索引(字典表标识),这样在利用字典表逐层返回的菜单建立树形数据结构时,可以加快索引字典表菜单列表数据中数据的速度,进一步地加快了菜单列表数据转化为树形结构数据速度,最终可以达到提高排序速率的目的。
在上述技术方案中,优选地,还包括:每一所述字典表都对应一所述字典表标识,且每一所述字典表都由父标识相同的菜单组成。
在该技术方案中,每个字典表都是一个字典表标识(KEY),以便于快速检索字典表中的菜单数据,且每一字典表都对应一个按照SupID,iOrder正序排列的菜单列表,每一字典表中的菜单都属于同一层菜单,这样可以保证字典表中的菜单是顺序排列的,并可以有效地提高字典表检索数据的效率。
在上述技术方案中,优选地,还包括:在向当前字典表中添加菜单时, 判断当前菜单与所述当前字典表中的菜单的父标识是否相同,在判定结果为是时,将所述当前菜单添加到所述当前字典表中。
在该技术方案中,向当前字典表中添加菜单时,判断当前菜单与所述当前字典表中的菜单的父标识是否相同,在判定结果为是时,才将当前菜单添加到当前字典表中,这样可以保证每一字典表中的菜单都属于同一层菜单,且每个字典表都有唯一的一个字典表标识,以便于可以正确无误地从字典表中索引每一层菜单。
在上述技术方案中,优选地,还包括:在判定结果为否时,新建一字典表,并将所述当前菜单添加到所述新建的字典表中。
在该技术方案中,在当前菜单与当前字典表中已有菜单的父标识不相同,意味着当前字典表已添加完成,需要重新初始化一字典表,这样可以保证每一字典表中的菜单都属于同一层菜单,且每个字典表都有唯一的一个字典表标识。
本发明的另一方面提出了一种树形节点排序装置,包括:排序单元,根据菜单列表数据中菜单的编号对所述菜单列表数据进行排序并根据所述菜单列表数据中菜单的父标识与菜单的所述编号对排序后的所述菜单列表数据进行重新排序;第一转化单元,连接至所述排序单元,将重新排序后的所述菜单列表数据转化为树形结构数据;检索单元,连接至所述转化单元,根据所述树形结构数据检索对应的父节点和子节点;展开单元,连接至所述检索单元,根据所述父节点与所述子节点对所述树形结构数据逐层展开;第二转化单元,连接至所述展开单元,将展开后的数据转化为目标菜单列表数据。
在该技术方案中,通过对排序后的菜单列表数据进行重新排序,这样菜单列表数据被组装成树形结构数据时,就可以按顺序从菜单列表数据取数据,不需要再递归遍历树形结构数据中同一个父菜单,这大大地缩短了组装树形结构数据的时间,同时减少了递归程序的应用,极大地加快了排序速度,缩短了排序时间,可以有效地提高用户的排序体验。
在上述技术方案中,优选地,所述第一转化单元包括:建立单元,根据重新排序后的所述菜单列表数据,建立字典表;添加单元,向所述字典表中添加所述菜单列表数据中的菜单,以及所述第一转化单元还用于:在 所述字典表添加完成时,根据字典表标识逐层获取所述字典表中的所述菜单列表数据,并将所述菜单列表数据转化为所述树形结构数据。
在该技术方案中,由于从字典表中取数据时间是递归减半的,且字典表中有索引(字典表标识),这样在利用字典表逐层返回的菜单建立树形数据结构时,可以加快索引字典表菜单列表数据中数据的速度,进一步地加快了菜单列表数据转化为树形结构数据速度,最终可以达到提高排序速率的目的。
在上述技术方案中,优选地,还包括:组成单元,每一所述字典表都对应一所述字典表标识,且每一所述字典表都由父标识相同的菜单组成。
在该技术方案中,每个字典表都是一个字典表标识(KEY),以便于快速检索字典表中的菜单数据,且每一字典表都对应一个按照SupID,iOrder正序排列的菜单列表,每一字典表中的菜单都属于同一层菜单,这样可以保证字典表中的菜单是顺序排列的,并可以有效地提高字典表检索数据的效率。
在上述技术方案中,优选地,还包括:所述添加单元包括:判断单元,在向当前字典表中添加菜单时,判断当前菜单与所述当前字典表中的菜单的父标识是否相同,并在判定结果为是时,将所述当前菜单添加到所述当前字典表中。
在该技术方案中,向当前字典表中添加菜单时,判断当前菜单与所述当前字典表中的菜单的父标识是否相同,在判定结果为是时,才将当前菜单添加到当前字典表中,这样可以保证每一字典表中的菜单都属于同一层菜单,且每个字典表都有唯一的一个字典表标识,以便于可以正确无误地从字典表中索引每一层菜单。
在上述技术方案中,优选地,还包括:所述建立单元还用于在判定结果为否时,新建一字典表,以及所述添加单元还用于,在判定结果为否时,将所述当前菜单添加到所述新建的字典表中。
在该技术方案中,在当前菜单与当前字典表中已有菜单的父标识不相同,意味着当前字典表已添加完成,需要重新初始化一字典表,这样可以保证每一字典表中的菜单都属于同一层菜单,且每个字典表都有唯一的一 个字典表标识。通过以上技术方案,极大地加快菜单的排序速度,缩短了排序时间,可以有效地提高用户的排序体验。
附图说明
图1示出了根据本发明的实施例的树形节点排序方法的流程图;
图2示出了根据本发明的实施例的树形节点排序装置的结构示意图;
图3示出了根据本发明的实施例的树形节点排序方法的一个菜单的树形结构的示意图;
图4示出了根据本发明实施例的字典表的结构截图;
图5至图7示出了根据本发明的实施例的树形节点排序方法的效果示意截图。
具体实施方式
为了能够更清楚地理解本发明的上述目的、特征和优点,下面结合附图和具体实施方式对本发明进行进一步的详细描述。需要说明的是,在不冲突的情况下,本申请的实施例及实施例中的特征可以相互组合。
在下面的描述中阐述了很多具体细节以便于充分理解本发明,但是,本发明还可以采用其他不同于在此描述的其他方式来实施,因此,本发明的保护范围并不受下面公开的具体实施例的限制。
图1示出了根据本发明的实施例的树形节点排序方法的流程图。
如图1所示,根据本发明的实施例的树形节点排序方法,包括如下步骤:步骤102,数据中菜单的编号对所述菜单列表数据进行排序;步骤104,列表数据中菜单的父标识与菜单的所述编号对排序后的所述菜单列表数据进行重新排序;步骤106,重新排序后的所述菜单列表数据转化为树形结构数据,以根据所述树形结构数据检索对应的父节点和子节点;步骤108,根据所述父节点与所述子节点对所述树形结构数据逐层展开,并将展开后的数据转化为目标菜单列表数据。
在该技术方案中,通过对排序后的菜单列表数据进行重新排序,这样菜单列表数据被组装成树形结构数据时,就可以按顺序从菜单列表数据取数据,不需要再递归遍历树形结构数据中同一个父菜单,这大大地缩短了 组装树形结构数据的时间,同时减少了递归程序的应用,极大地加快了排序速度,缩短了排序时间,可以有效地提高用户的排序体验。
在上述技术方案中,优选地,还包括:将重新排序后的所述菜单列表数据转化为树形结构数据,具体包括:根据重新排序后的所述菜单列表数据,建立字典表,并向所述字典表中添加所述菜单列表数据中的菜单,以及在所述字典表添加完成时,根据字典表标识逐层获取所述字典表中的所述菜单列表数据,并将所述菜单列表数据转化为所述树形结构数据。
在该技术方案中,由于从字典表中取数据时间是递归减半的,且字典表中有索引(字典表标识),这样在利用字典表逐层返回的菜单建立树形数据结构时,可以加快索引字典表菜单列表数据中数据的速度,进一步地加快了菜单列表数据转化为树形结构数据速度,最终可以达到提高排序速率的目的。
在上述技术方案中,优选地,还包括:每一所述字典表都对应一所述字典表标识,且每一所述字典表都由父标识相同的菜单组成。
在该技术方案中,每个字典表都是一个字典表标识(KEY),以便于快速检索字典表中的菜单数据,且每一字典表都对应一个按照SupID,iOrder正序排列的菜单列表,每一字典表中的菜单都属于同一层菜单,这样可以保证字典表中的菜单是顺序排列的,并可以有效地提高字典表检索数据的效率。
在上述技术方案中,优选地,还包括:在向当前字典表中添加菜单时,判断当前菜单与所述当前字典表中的菜单的父标识是否相同,
在判定结果为是时,将所述当前菜单添加到所述当前字典表中。
在该技术方案中,向当前字典表中添加菜单时,判断当前菜单与所述当前字典表中的菜单的父标识是否相同,在判定结果为是时,才将当前菜单添加到当前字典表中,这样可以保证每一字典表中的菜单都属于同一层菜单,且每个字典表都有唯一的一个字典表标识,以便于可以正确无误地从字典表中索引每一层菜单。
在上述技术方案中,优选地,还包括:在判定结果为否时,新建一字典表,并将所述当前菜单添加到所述新建的字典表中。
在该技术方案中,在当前菜单与当前字典表中已有菜单的父标识不相 同,意味着当前字典表已添加完成,需要重新初始化一字典表,这样可以保证每一字典表中的菜单都属于同一层菜单,且每个字典表都有唯一的一个字典表标识。图2示出了根据本发明的实施例的树形节点排序装置的结构示意图。
如图2所示,根据本发明的实施例的树形节点排序装置200,包括:排序单元202,根据菜单列表数据中菜单的编号对所述菜单列表数据进行排序并根据所述菜单列表数据中菜单的父标识与菜单的所述编号对排序后的所述菜单列表数据进行重新排序;第一转化单元204,连接至所述排序单元202,将重新排序后的所述菜单列表数据转化为树形结构数据;检索单元206,连接至所述转化单元,根据所述树形结构数据检索对应的父节点和子节点;展开单元208,连接至所述检索单元206,根据所述父节点与所述子节点对所述树形结构数据逐层展开;第二转化单元210,连接至所述展开单元208,将展开后的数据转化为目标菜单列表数据。
在该技术方案中,通过对排序后的菜单列表数据进行重新排序,这样菜单列表数据被组装成树形结构数据时,就可以按顺序从菜单列表数据取数据,不需要再递归遍历树形结构数据中同一个父菜单,这大大地缩短了组装树形结构数据的时间,同时减少了递归程序的应用,极大地加快了排序速度,缩短了排序时间,可以有效地提高用户的排序体验。
在上述技术方案中,优选地,所述第一转化单元204包括:建立单元2042,根据重新排序后的所述菜单列表数据,建立字典表;添加单元2044,向所述字典表中添加所述菜单列表数据中的菜单,以及所述第一转化单元204还用于:在所述字典表添加完成时,根据字典表标识逐层获取所述字典表中的所述菜单列表数据,并将所述菜单列表数据转化为所述树形结构数据。
在该技术方案中,由于从字典表中取数据时间是递归减半的,且字典表中有索引(字典表标识),这样在利用字典表逐层返回的菜单建立树形数据结构时,可以加快索引字典表菜单列表数据中数据的速度,进一步地加快了菜单列表数据转化为树形结构数据速度,最终可以达到提高排序速率的目的。
在上述技术方案中,优选地,还包括:组成单元212,每一所述字典 表都对应一所述字典表标识,且每一所述字典表都由父标识相同的菜单组成。
在该技术方案中,每个字典表都是一个字典表标识(KEY),以便于快速检索字典表中的菜单数据,且每一字典表都对应一个按照SupID,iOrder正序排列的菜单列表,每一字典表中的菜单都属于同一层菜单,这样可以保证字典表中的菜单是顺序排列的,并可以有效地提高字典表检索数据的效率。
在上述技术方案中,优选地,还包括:所述添加单元2044包括:判断单元20442,在向当前字典表中添加菜单时,判断当前菜单与所述当前字典表中的菜单的父标识是否相同,并在判定结果为是时,将所述当前菜单添加到所述当前字典表中。
在该技术方案中,向当前字典表中添加菜单时,判断当前菜单与所述当前字典表中的菜单的父标识是否相同,在判定结果为是时,才将当前菜单添加到当前字典表中,这样可以保证每一字典表中的菜单都属于同一层菜单,且每个字典表都有唯一的一个字典表标识,以便于可以正确无误地从字典表中索引每一层菜单。
在上述技术方案中,优选地,还包括:所述建立单元2042还用于在判定结果为否时,新建一字典表,以及所述添加单元2044还用于,在判定结果为否时,将所述当前菜单添加到所述新建的字典表中。
在该技术方案中,在当前菜单与当前字典表中已有菜单的父标识不相同,意味着当前字典表已添加完成,需要重新初始化一字典表,这样可以保证每一字典表中的菜单都属于同一层菜单,且每个字典表都有唯一的一个字典表标识。图3示出了根据本发明的实施例的树形节点排序方法的一个菜单的树形结构的示意图。
如图3所示,图3示出了根据本发明的实施例的树形节点排序方法的一个菜单的树形结构,该菜单的存储结构如表1所示:
表1
ID | 菜单ID | 父菜单ID | iOrder | 菜单 |
1 | #0 | @1 | 1 | 基础设置 |
2 | #1 | @1 | 0 | 业务工作 |
3 | #2 | @1 | 2 | 系统服务 |
4 | CSG | #1 | -7781 | 客户关系管理 |
5 | FAG | #1 | -7800 | 财务会计 |
6 | SCMG | #1 | -7778 | 供应链 |
7 | GL | FAG | -7799 | 总账 |
8 | NB | FAG | -7794 | 网上银行 |
9 | NE | FAG | 20 | 网上报销 |
10 | GL01 | GL | 30 | 设置 |
11 | GL04 | GL | 510 | 出纳 |
12 | GL09 | GL | 40 | 期初 |
13 | GL010003 | GL09 | 60 | 期初余额 |
… | …… | …… | …… | …… |
下面将结合图3对应的菜单表(未排序且没转化成树形结构数据之前的一张菜单表),详细地说明本发明中树形节点排序方法的具体步骤:
1)首先假定,第一级菜单存在一个特定父标识,比如NULL或者#1等,如表1所示,第一级菜单为最高级标识,共有3个ID标识“#0”、“#1”、“#2”,其父标识SupID标识为“@1”,第二级菜单共有3个ID标识“CSG、FAG、SCMG”,其父标识SupID为“#1”……,然后对该菜单表按照其iOrder正序排列,排序结果如表2所示。
表2
菜单ID | 父菜单ID | iOrder | 菜单 |
FAG | #1 | -7800 | 财务会计 |
GL | FAG | -7799 | 总账 |
NB | FAG | -7794 | 网上银行 |
CSG | #1 | -7781 | 客户关系管理 |
SCMG | #1 | -7778 | 供应链 |
#1 | @1 | 0 | 业务工作 |
#0 | @1 | 1 | 基础设置 |
#2 | @1 | 2 | 系统服务 |
NE | FAG | 20 | 网上报销 |
GL01 | GL | 30 | 设置 |
GL09 | GL | 40 | 期初 |
GL010003 | GL09 | 60 | 期初余额 |
GL04 | GL | 510 | 出纳 |
…… | …… | …… | …… |
2)按菜单的父标识和iOrder(菜单编号)对菜单进行第二次排序的结果,其排序结果如表3所示。
表3
菜单ID | 父菜单ID | iOrder | 菜单 |
FAG | #1 | -7800 | 财务会计 |
CSG | #1 | -7781 | 客户关系管理 |
SCMG | #1 | -7778 | 供应链 |
#1 | @1 | 0 | 业务工作 |
#0 | @1 | 1 | 基础设置 |
#2 | @1 | 2 | 系统服务 |
GL | FAG | -7799 | 总账 |
NB | FAG | -7794 | 网上银行 |
NE | FAG | 20 | 网上报销 |
GL01 | GL | 30 | 设置 |
GL09 | GL | 40 | 出纳 |
GL04 | GL | 510 | 期初 |
GL010003 | GL09 | 60 | 期初余额 |
3)递归将步骤2的结果并转换成字典表,每个字典表都是一个KEY, 一个KEY对应一个按照SupID,iOrder进行正序排列的菜单列表,该操作伪代码如下:
初始化一个字典(每一个KEY都对应一个SupID),遍历重新排序后的菜单列表数据发送过来的菜单,
当第1个时,
初始化一个菜单列表,
将当前行插入这个菜单列表
当在第2个到倒数第二个之间时,
如果当前菜单的SupID和上一个菜单的SupID一致时,
向菜单列表中添加这个菜单
如果当前菜单的SupID和上一个菜单的SupID不一致时,
将当前菜单列表加入到字典表的字段列表中,KEY是上一个菜单的SupID
重新初始化一个菜单列表
向菜单列表中添加这个菜单
当最后1个时,
如果当前菜单的SupID和上一个菜单的SupID一致时,
向菜单列表中添加这个菜单
将当前菜单列表加入到字典表的字段列表中,KEY是上一个菜单的SupID
将当前菜单列表加入到字典表的字段列表中,KEY是上一个菜单的SupID
如果当前菜单的SupID和上一个菜单的SupID不一致时,
将当前菜单列表加入到字典表的字段列表中,KEY是上一个菜单的SupID
重新初始化一个菜单列表
向菜单列表中添加这个菜单
将当前菜单列表加入到字段列表中,KEY是本次菜单的SupID
4)从根节点开始获取第一层级菜单,如下表4所示:
表4
菜单ID | 父菜单ID | iOrder | 菜单 |
#0 | @1 | 1 | 基础设置 |
#1 | @1 | 0 | 业务工作 |
#2 | @1 | 2 | 系统服务 |
5)通过第一层级菜单以及步骤4中的返回结果,进行菜单列表的树形数据结构的组装。操作伪代码如下:
遍历步骤4发送过来的菜单
如果菜单ID不为空
在步骤3中查找菜单ID,如果存在菜单,
将其对应的菜单放在该父菜单的子菜单中
递归步骤5
6)将树的叶子逐级递归展开并进行列表式组装,从而获取所需要的排序结果。操作伪代码如下:
遍历步骤5发送过来的树形菜单,
将当前菜单加入到列表中,
如果存在孩子菜单
递归步骤6
7)最后获得的结果图表5所示。
表5
菜单ID | 父菜单ID | iOrder | 菜单 |
#1 | @1 | 0 | 业务工作 |
FAG | #1 | -7800 | 财务会计 |
GL | FAG | -7799 | 总账 |
GL01 | GL | 30 | 设置 |
GL09 | GL | 40 | 期初 |
GL010003 | GL09 | 60 | 期初余额 |
GL04 | GL | 510 | 出纳 |
NB | FAG | -7794 | 网上银行 |
NE | FAG | 20 | 网上报销 |
CSG | #1 | -7781 | 客户关系管理 |
SCMG | #1 | -7778 | 供应链 |
#0 | @1 | 1 | 基础设置 |
#2 | @1 | 2 | 系统服务 |
图4示出了根据本发明实施例的字典表的结构截图。
如图4所示,图4示出了根据本发明实施例的字典表内部数据的结构,从图4中可见,每个字典表中都由的父标识相同的子菜单构成,这样有利于准确无误地从字典表中检索每级菜单。
图5至图7示出了根据本发明的实施例的树形节点排序方法的效果示意截图。
如图5至图7所示,根据本发明的实施例的树形节点排序方法对3664行菜单进行排序,从图5至图7可以看出本发明的快速排序算法,和普通的先组合树再排序的方法相比,时间明显缩短,排序时间从原本15+秒缩短至毫秒级别,因此,相比于将菜单列表数据转化为树形结构数据时,通过先转化为树形结构数据再遍历排序每个菜单中子菜单而言,本发明的技术方案(获取菜单时的两次不同排序方式)可以使得以树形存储结构的菜单的排序效率得到了大幅度的提升。
以上结合附图详细说明了本发明的技术方案,通过本技术方案,可以大大地缩短树形结构数据的排序时间,同时减少了递归程序的应用,极大地加快了排序速度,并有效地提高用户的排序体验。
术语“连接”等均应做广义理解,例如,可以是固定连接,也可以是 可拆卸连接,或一体地连接;可以是直接相连,也可以通过中间媒介间接相连。对于本领域的普通技术人员而言,可以根据具体情况理解上述术语在本发明中的具体含义。
以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (8)
1.一种树形节点排序方法,其特征在于,包括:
根据菜单列表数据中菜单的编号对所述菜单列表数据进行排序;
根据所述菜单列表数据中菜单的父标识与菜单的所述编号对排序后的所述菜单列表数据进行重新排序;
将重新排序后的所述菜单列表数据转化为树形结构数据,以根据所述树形结构数据检索对应的父节点和子节点;
根据所述父节点与所述子节点对所述树形结构数据逐层展开,并将展开后的数据转化为目标菜单列表数据;
将重新排序后的所述菜单列表数据转化为树形结构数据,具体包括:
根据重新排序后的所述菜单列表数据,建立字典表,并向所述字典表中添加所述菜单列表数据中的菜单,以及
在所述字典表添加完成时,根据字典表标识逐层获取所述字典表中的所述菜单列表数据,并将所述菜单列表数据转化为所述树形结构数据。
2.根据权利要求1所述的树形节点排序方法,其特征在于,还包括:
每一所述字典表都对应一所述字典表标识,且每一所述字典表都由父标识相同的菜单组成。
3.根据权利要求1所述的树形节点排序方法,其特征在于,还包括:
在向当前字典表中添加菜单时,判断当前菜单与所述当前字典表中的菜单的父标识是否相同,
在判定结果为是时,将所述当前菜单添加到所述当前字典表中。
4.根据权利要求3所述的树形节点排序方法,其特征在于,
在判定结果为否时,新建一字典表,并将所述当前菜单添加到所述新建的字典表中。
5.一种树形节点排序装置,其特征在于,包括:
排序单元,根据菜单列表数据中菜单的编号对所述菜单列表数据进行排序并根据所述菜单列表数据中菜单的父标识与菜单的所述编号对排序后的所述菜单列表数据进行重新排序;
第一转化单元,连接至所述排序单元,将重新排序后的所述菜单列表数据转化为树形结构数据;
检索单元,连接至所述转化单元,根据所述树形结构数据检索对应的父节点和子节点;
展开单元,连接至所述检索单元,根据所述父节点与所述子节点对所述树形结构数据逐层展开;
第二转化单元,连接至所述展开单元,将展开后的数据转化为目标菜单列表数据;
所述第一转化单元包括:
建立单元,根据重新排序后的所述菜单列表数据,建立字典表;
添加单元,向所述字典表中添加所述菜单列表数据中的菜单,以及所述第一转化单元还用于:
在所述字典表添加完成时,根据字典表标识逐层获取所述字典表中的所述菜单列表数据,并将所述菜单列表数据转化为所述树形结构数据。
6.根据权利要求5所述的树形节点排序装置,其特征在于,还包括:
组成单元,每一所述字典表都对应一所述字典表标识,且每一所述字典表都由父标识相同的菜单组成。
7.根据权利要求5所述的树形节点排序装置,其特征在于,所述添加单元包括:
判断单元,在向当前字典表中添加菜单时,判断当前菜单与所述当前字典表中的菜单的父标识是否相同,并在判定结果为是时,将所述当前菜单添加到所述当前字典表中。
8.根据权利要求7所述的树形节点排序装置,其特征在于,
所述建立单元还用于在判定结果为否时,新建一字典表,以及
所述添加单元还用于,在判定结果为否时,将所述当前菜单添加到所述新建的字典表中。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410289591.9A CN104102694B (zh) | 2014-06-24 | 2014-06-24 | 树形节点排序方法和树形节点排序装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410289591.9A CN104102694B (zh) | 2014-06-24 | 2014-06-24 | 树形节点排序方法和树形节点排序装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104102694A CN104102694A (zh) | 2014-10-15 |
CN104102694B true CN104102694B (zh) | 2018-11-20 |
Family
ID=51670848
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410289591.9A Active CN104102694B (zh) | 2014-06-24 | 2014-06-24 | 树形节点排序方法和树形节点排序装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104102694B (zh) |
Families Citing this family (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105068736B (zh) * | 2015-09-11 | 2019-03-05 | 努比亚技术有限公司 | 一种打开应用的移动终端和方法 |
CN108255834A (zh) * | 2016-12-28 | 2018-07-06 | 航天信息股份有限公司 | 一种基于ListView的自定义树形结构数据分级显示的方法及系统 |
CN108037967A (zh) * | 2017-11-27 | 2018-05-15 | 深圳市丰巢科技有限公司 | 一种基于多父子结构的菜单加载方法以及电子设备 |
CN110780793B (zh) * | 2019-10-31 | 2021-11-09 | 北京梆梆安全科技有限公司 | 一种树形菜单的构建方法、装置、电子设备及存储介质 |
CN115291773B (zh) * | 2022-08-09 | 2024-07-23 | 北京商银微芯科技有限公司 | 树形结构数据展示方法及装置 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101236550A (zh) * | 2007-02-01 | 2008-08-06 | 阿里巴巴公司 | 一种处理树型结构数据的方法及系统 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2002230038A (ja) * | 2001-02-02 | 2002-08-16 | Hitachi Ltd | データ表示方法 |
CN101251837B (zh) * | 2008-03-26 | 2011-03-23 | 腾讯科技(深圳)有限公司 | 电子文件列表的显示处理方法和系统 |
-
2014
- 2014-06-24 CN CN201410289591.9A patent/CN104102694B/zh active Active
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101236550A (zh) * | 2007-02-01 | 2008-08-06 | 阿里巴巴公司 | 一种处理树型结构数据的方法及系统 |
Also Published As
Publication number | Publication date |
---|---|
CN104102694A (zh) | 2014-10-15 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104102694B (zh) | 树形节点排序方法和树形节点排序装置 | |
CN104601438B (zh) | 一种好友推荐方法和装置 | |
CN103902698B (zh) | 一种数据存储系统和存储方法 | |
CN103902702B (zh) | 一种数据存储系统和存储方法 | |
CN103902701B (zh) | 一种数据存储系统和存储方法 | |
CN108038576A (zh) | 基于改进Dijkstra算法的物流配送路径选择方法及系统 | |
CN104204969B (zh) | 参数设定装置 | |
CN109711424B (zh) | 一种基于决策树的行为规则获取方法、装置及设备 | |
CN104462592A (zh) | 基于不确定语义的社交网用户行为关系推演系统及方法 | |
CN104268629B (zh) | 一种基于先验信息和网络固有信息的复杂网络社区检测方法 | |
CN109062936B (zh) | 一种数据查询方法、计算机可读存储介质及终端设备 | |
CN111737608B (zh) | 企业信息检索结果排序方法及装置 | |
CN106203494A (zh) | 一种基于内存计算的并行化聚类方法 | |
CN103678513B (zh) | 一种交互式的检索式生成方法及系统 | |
CN104866626A (zh) | 一种电信业务的推荐方法及装置 | |
CN108734159A (zh) | 一种图像中敏感信息的检测方法及系统 | |
CN104951560A (zh) | 基于知识点结构的搜索装置 | |
CN108228787A (zh) | 按照多级类目处理信息的方法和装置 | |
CN103902599A (zh) | 模糊查找的方法和装置 | |
Xie et al. | Dual probabilistic linguistic term set and its application on multi-criteria group decision making problems | |
CN101308507B (zh) | 互联网信息发布和搜索方法 | |
CN103309857A (zh) | 一种分类语料确定方法和设备 | |
CN106095961A (zh) | 表显示处理方法和装置 | |
CN102364475A (zh) | 基于身份识别对检索结果排序的系统及方法 | |
CN117217634B (zh) | 一种基于复杂网络的企业合作社区发现方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |