樹形節(jié)點(diǎn)排序方法和樹形節(jié)點(diǎn)排序裝置制造方法
【專利摘要】本發(fā)明提出了一種樹形節(jié)點(diǎn)排序方法和樹形節(jié)點(diǎn)排序裝置,其中,樹形節(jié)點(diǎn)排序方法包括:根據(jù)菜單列表數(shù)據(jù)中菜單的編號(hào)對(duì)所述菜單列表數(shù)據(jù)進(jìn)行排序;根據(jù)所述菜單列表數(shù)據(jù)中菜單的父標(biāo)識(shí)與菜單的所述編號(hào)對(duì)排序后的所述菜單列表數(shù)據(jù)進(jìn)行重新排序;將重新排序后的所述菜單列表數(shù)據(jù)轉(zhuǎn)化為樹形結(jié)構(gòu)數(shù)據(jù),以根據(jù)所述樹形結(jié)構(gòu)數(shù)據(jù)檢索對(duì)應(yīng)的父節(jié)點(diǎn)和子節(jié)點(diǎn);根據(jù)所述父節(jié)點(diǎn)與所述子節(jié)點(diǎn)對(duì)所述樹形結(jié)構(gòu)數(shù)據(jù)逐層展開,并將展開后的數(shù)據(jù)轉(zhuǎn)化為目標(biāo)菜單列表數(shù)據(jù)。通過發(fā)明的本技術(shù)方案,可以大大地縮短樹形結(jié)構(gòu)數(shù)據(jù)的排序時(shí)間,同時(shí)減少了遞歸程序的應(yīng)用,極大地加快了排序速度,并有效地提高用戶的排序體驗(yàn)。
【專利說明】樹形節(jié)點(diǎn)排序方法和樹形節(jié)點(diǎn)排序裝置
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明涉及排序【技術(shù)領(lǐng)域】,具體而言,涉及一種樹形節(jié)點(diǎn)排序方法和一種樹形節(jié) 點(diǎn)排序裝置。
【背景技術(shù)】
[0002] 在實(shí)際應(yīng)用中,樹形數(shù)據(jù)結(jié)構(gòu)的使用是十分廣泛的。例如,中國(guó)軍隊(duì)的三三編制就 是一種典型的樹形數(shù)據(jù)結(jié)構(gòu):三個(gè)連為一個(gè)團(tuán),三個(gè)團(tuán)為一個(gè)師。又例如,大多數(shù)公司的組 織結(jié)構(gòu)也是樹形數(shù)據(jù)結(jié)構(gòu):一個(gè)項(xiàng)目經(jīng)理帶領(lǐng)若干項(xiàng)目成員,一個(gè)項(xiàng)目主管又帶領(lǐng)若干個(gè) 項(xiàng)目經(jīng)理。
[0003] 目前,在使用數(shù)據(jù)庫進(jìn)行數(shù)據(jù)存儲(chǔ)時(shí),對(duì)于具有樹形存儲(chǔ)結(jié)構(gòu)的數(shù)據(jù),通常多采用 父子節(jié)點(diǎn)的存儲(chǔ)方法即每一個(gè)節(jié)點(diǎn)都存在一 ID標(biāo)識(shí)及父標(biāo)識(shí)SupID,而目前對(duì)具有樹形存 儲(chǔ)結(jié)構(gòu)的數(shù)據(jù)的排序很慢。下面將以菜單為例,說明目前的樹形存儲(chǔ)結(jié)構(gòu)的數(shù)據(jù)排序方法, 目前常用的排序方法是將列表式數(shù)據(jù)結(jié)構(gòu)通過遞歸變化成樹形數(shù)據(jù)結(jié)構(gòu),再通過遞歸遍歷 此樹中同一個(gè)父菜單,同時(shí),同一層菜單下的數(shù)據(jù)還要通過其iOrder (菜單編號(hào))來排序。 總體看來,這種排序方式導(dǎo)致花費(fèi)大量時(shí)間對(duì)同一父菜單下的子菜單進(jìn)行排序,進(jìn)一步造 成遞歸程序的大量使用,極大地降低了排序速度,例如,一個(gè)擁有3500+的菜單的排序時(shí)間 會(huì)在15秒以上,這大大地降低了用戶的使用體驗(yàn)。
[0004] 因此,如何加快菜單等樹形存儲(chǔ)結(jié)構(gòu)的數(shù)據(jù)的排序速度,減短排序時(shí)間,提高用戶 體驗(yàn)成為亟待解決的問題。
【發(fā)明內(nèi)容】
[0005] 本發(fā)明正是基于上述問題,提出了一種新的技術(shù)方案,可以提高菜單等樹形存儲(chǔ) 結(jié)構(gòu)的數(shù)據(jù)的排序速度,減短排序時(shí)間,提高用戶體驗(yàn)。
[0006] 有鑒于此,本發(fā)明的一方面提出了一種樹形節(jié)點(diǎn)排序方法,包括:根據(jù)菜單列表數(shù) 據(jù)中菜單的編號(hào)對(duì)所述菜單列表數(shù)據(jù)進(jìn)行排序;根據(jù)所述菜單列表數(shù)據(jù)中菜單的父標(biāo)識(shí)與 菜單的所述編號(hào)對(duì)排序后的所述菜單列表數(shù)據(jù)進(jìn)行重新排序;將重新排序后的所述菜單列 表數(shù)據(jù)轉(zhuǎn)化為樹形結(jié)構(gòu)數(shù)據(jù),以根據(jù)所述樹形結(jié)構(gòu)數(shù)據(jù)檢索對(duì)應(yīng)的父節(jié)點(diǎn)和子節(jié)點(diǎn);根據(jù) 所述父節(jié)點(diǎn)與所述子節(jié)點(diǎn)對(duì)所述樹形結(jié)構(gòu)數(shù)據(jù)逐層展開,并將展開后的數(shù)據(jù)轉(zhuǎn)化為目標(biāo)菜 單列表數(shù)據(jù)。
[0007] 在該技術(shù)方案中,通過對(duì)排序后的菜單列表數(shù)據(jù)進(jìn)行重新排序,這樣菜單列表數(shù) 據(jù)被組裝成樹形結(jié)構(gòu)數(shù)據(jù)時(shí),就可以按順序從菜單列表數(shù)據(jù)取數(shù)據(jù),不需要再遞歸遍歷樹 形結(jié)構(gòu)數(shù)據(jù)中同一個(gè)父菜單,這大大地縮短了組裝樹形結(jié)構(gòu)數(shù)據(jù)的時(shí)間,同時(shí)減少了遞歸 程序的應(yīng)用,極大地加快了排序速度,縮短了排序時(shí)間,可以有效地提高用戶的排序體驗(yàn)。
[0008] 在上述技術(shù)方案中,優(yōu)選地,還包括:將重新排序后的所述菜單列表數(shù)據(jù)轉(zhuǎn)化為樹 形結(jié)構(gòu)數(shù)據(jù),具體包括:根據(jù)重新排序后的所述菜單列表數(shù)據(jù),建立字典表,并向所述字典 表中添加所述菜單列表數(shù)據(jù)中的菜單,以及在所述字典表添加完成時(shí),根據(jù)字典表標(biāo)識(shí)逐 層獲取所述字典表中的所述菜單列表數(shù)據(jù),并將所述菜單列表數(shù)據(jù)轉(zhuǎn)化為所述樹形結(jié)構(gòu)數(shù) 據(jù)。
[0009] 在該技術(shù)方案中,由于從字典表中取數(shù)據(jù)時(shí)間是遞歸減半的,且字典表中有索引 (字典表標(biāo)識(shí)),這樣在利用字典表逐層返回的菜單建立樹形數(shù)據(jù)結(jié)構(gòu)時(shí),可以加快索引 字典表菜單列表數(shù)據(jù)中數(shù)據(jù)的速度,進(jìn)一步地加快了菜單列表數(shù)據(jù)轉(zhuǎn)化為樹形結(jié)構(gòu)數(shù)據(jù)速 度,最終可以達(dá)到提商排序速率的目的。
[0010] 在上述技術(shù)方案中,優(yōu)選地,還包括:每一所述字典表都對(duì)應(yīng)一所述字典表標(biāo)識(shí), 且每一所述字典表都由父標(biāo)識(shí)相同的菜單組成。
[0011] 在該技術(shù)方案中,每個(gè)字典表都是一個(gè)字典表標(biāo)識(shí)(KEY),以便于快速檢索字典表 中的菜單數(shù)據(jù),且每一字典表都對(duì)應(yīng)一個(gè)按照SupID,iOrder正序排列的菜單列表,每一字 典表中的菜單都屬于同一層菜單,這樣可以保證字典表中的菜單是順序排列的,并可以有 效地提高字典表檢索數(shù)據(jù)的效率。
[0012] 在上述技術(shù)方案中,優(yōu)選地,還包括:在向當(dāng)前字典表中添加菜單時(shí),判斷當(dāng)前菜 單與所述當(dāng)前字典表中的菜單的父標(biāo)識(shí)是否相同,在判定結(jié)果為是時(shí),將所述當(dāng)前菜單添 加到所述當(dāng)前字典表中。
[0013] 在該技術(shù)方案中,向當(dāng)前字典表中添加菜單時(shí),判斷當(dāng)前菜單與所述當(dāng)前字典表 中的菜單的父標(biāo)識(shí)是否相同,在判定結(jié)果為是時(shí),才將當(dāng)前菜單添加到當(dāng)前字典表中,這樣 可以保證每一字典表中的菜單都屬于同一層菜單,且每個(gè)字典表都有唯一的一個(gè)字典表標(biāo) 識(shí),以便于可以正確無誤地從字典表中索引每一層菜單。
[0014] 在上述技術(shù)方案中,優(yōu)選地,還包括:在判定結(jié)果為否時(shí),新建一字典表,并將所述 當(dāng)前菜單添加到所述新建的字典表中。
[0015] 在該技術(shù)方案中,在當(dāng)前菜單與當(dāng)前字典表中已有菜單的父標(biāo)識(shí)不相同,意味著 當(dāng)前字典表已添加完成,需要重新初始化一字典表,這樣可以保證每一字典表中的菜單都 屬于同一層菜單,且每個(gè)字典表都有唯一的一個(gè)字典表標(biāo)識(shí)。
[0016] 本發(fā)明的另一方面提出了一種樹形節(jié)點(diǎn)排序裝置,包括:排序單元,根據(jù)菜單列表 數(shù)據(jù)中菜單的編號(hào)對(duì)所述菜單列表數(shù)據(jù)進(jìn)行排序并根據(jù)所述菜單列表數(shù)據(jù)中菜單的父標(biāo) 識(shí)與菜單的所述編號(hào)對(duì)排序后的所述菜單列表數(shù)據(jù)進(jìn)行重新排序;第一轉(zhuǎn)化單元,連接至 所述排序單元,將重新排序后的所述菜單列表數(shù)據(jù)轉(zhuǎn)化為樹形結(jié)構(gòu)數(shù)據(jù);檢索單元,連接至 所述轉(zhuǎn)化單元,根據(jù)所述樹形結(jié)構(gòu)數(shù)據(jù)檢索對(duì)應(yīng)的父節(jié)點(diǎn)和子節(jié)點(diǎn);展開單元,連接至所述 檢索單元,根據(jù)所述父節(jié)點(diǎn)與所述子節(jié)點(diǎn)對(duì)所述樹形結(jié)構(gòu)數(shù)據(jù)逐層展開;第二轉(zhuǎn)化單元,連 接至所述展開單元,將展開后的數(shù)據(jù)轉(zhuǎn)化為目標(biāo)菜單列表數(shù)據(jù)。
[0017] 在該技術(shù)方案中,通過對(duì)排序后的菜單列表數(shù)據(jù)進(jìn)行重新排序,這樣菜單列表數(shù) 據(jù)被組裝成樹形結(jié)構(gòu)數(shù)據(jù)時(shí),就可以按順序從菜單列表數(shù)據(jù)取數(shù)據(jù),不需要再遞歸遍歷樹 形結(jié)構(gòu)數(shù)據(jù)中同一個(gè)父菜單,這大大地縮短了組裝樹形結(jié)構(gòu)數(shù)據(jù)的時(shí)間,同時(shí)減少了遞歸 程序的應(yīng)用,極大地加快了排序速度,縮短了排序時(shí)間,可以有效地提高用戶的排序體驗(yàn)。
[0018] 在上述技術(shù)方案中,優(yōu)選地,所述第一轉(zhuǎn)化單元包括:建立單元,根據(jù)重新排序后 的所述菜單列表數(shù)據(jù),建立字典表;添加單元,向所述字典表中添加所述菜單列表數(shù)據(jù)中的 菜單,以及所述第一轉(zhuǎn)化單元還用于:在所述字典表添加完成時(shí),根據(jù)字典表標(biāo)識(shí)逐層獲 取所述字典表中的所述菜單列表數(shù)據(jù),并將所述菜單列表數(shù)據(jù)轉(zhuǎn)化為所述樹形結(jié)構(gòu)數(shù)據(jù)。
[0019] 在該技術(shù)方案中,由于從字典表中取數(shù)據(jù)時(shí)間是遞歸減半的,且字典表中有索引 (字典表標(biāo)識(shí)),這樣在利用字典表逐層返回的菜單建立樹形數(shù)據(jù)結(jié)構(gòu)時(shí),可以加快索引 字典表菜單列表數(shù)據(jù)中數(shù)據(jù)的速度,進(jìn)一步地加快了菜單列表數(shù)據(jù)轉(zhuǎn)化為樹形結(jié)構(gòu)數(shù)據(jù)速 度,最終可以達(dá)到提商排序速率的目的。
[0020] 在上述技術(shù)方案中,優(yōu)選地,還包括:組成單元,每一所述字典表都對(duì)應(yīng)一所述字 典表標(biāo)識(shí),且每一所述字典表都由父標(biāo)識(shí)相同的菜單組成。
[0021] 在該技術(shù)方案中,每個(gè)字典表都是一個(gè)字典表標(biāo)識(shí)(KEY),以便于快速檢索字典表 中的菜單數(shù)據(jù),且每一字典表都對(duì)應(yīng)一個(gè)按照SupID,iOrder正序排列的菜單列表,每一字 典表中的菜單都屬于同一層菜單,這樣可以保證字典表中的菜單是順序排列的,并可以有 效地提高字典表檢索數(shù)據(jù)的效率。
[0022] 在上述技術(shù)方案中,優(yōu)選地,還包括:所述添加單元包括:判斷單元,在向當(dāng)前字 典表中添加菜單時(shí),判斷當(dāng)前菜單與所述當(dāng)前字典表中的菜單的父標(biāo)識(shí)是否相同,并在判 定結(jié)果為是時(shí),將所述當(dāng)前菜單添加到所述當(dāng)前字典表中。
[0023] 在該技術(shù)方案中,向當(dāng)前字典表中添加菜單時(shí),判斷當(dāng)前菜單與所述當(dāng)前字典表 中的菜單的父標(biāo)識(shí)是否相同,在判定結(jié)果為是時(shí),才將當(dāng)前菜單添加到當(dāng)前字典表中,這樣 可以保證每一字典表中的菜單都屬于同一層菜單,且每個(gè)字典表都有唯一的一個(gè)字典表標(biāo) 識(shí),以便于可以正確無誤地從字典表中索引每一層菜單。
[0024] 在上述技術(shù)方案中,優(yōu)選地,還包括:所述建立單元還用于在判定結(jié)果為否時(shí),新 建一字典表,以及所述添加單元還用于,在判定結(jié)果為否時(shí),將所述當(dāng)前菜單添加到所述新 建的字典表中。
[0025] 在該技術(shù)方案中,在當(dāng)前菜單與當(dāng)前字典表中已有菜單的父標(biāo)識(shí)不相同,意味著 當(dāng)前字典表已添加完成,需要重新初始化一字典表,這樣可以保證每一字典表中的菜單都 屬于同一層菜單,且每個(gè)字典表都有唯一的一個(gè)字典表標(biāo)識(shí)。通過以上技術(shù)方案,極大地 加快菜單的排序速度,縮短了排序時(shí)間,可以有效地提高用戶的排序體驗(yàn)。
【專利附圖】
【附圖說明】
[0026] 圖1示出了根據(jù)本發(fā)明的實(shí)施例的樹形節(jié)點(diǎn)排序方法的流程圖;
[0027] 圖2示出了根據(jù)本發(fā)明的實(shí)施例的樹形節(jié)點(diǎn)排序裝置的結(jié)構(gòu)示意圖;
[0028] 圖3示出了根據(jù)本發(fā)明的實(shí)施例的樹形節(jié)點(diǎn)排序方法的一個(gè)菜單的樹形結(jié)構(gòu)的 示意圖;
[0029] 圖4示出了根據(jù)本發(fā)明實(shí)施例的字典表的結(jié)構(gòu)截圖;
[0030] 圖5至圖7示出了根據(jù)本發(fā)明的實(shí)施例的樹形節(jié)點(diǎn)排序方法的效果示意截圖。
【具體實(shí)施方式】
[0031] 為了能夠更清楚地理解本發(fā)明的上述目的、特征和優(yōu)點(diǎn),下面結(jié)合附圖和具體實(shí) 施方式對(duì)本發(fā)明進(jìn)行進(jìn)一步的詳細(xì)描述。需要說明的是,在不沖突的情況下,本申請(qǐng)的實(shí)施 例及實(shí)施例中的特征可以相互組合。
[0032] 在下面的描述中闡述了很多具體細(xì)節(jié)以便于充分理解本發(fā)明,但是,本發(fā)明還可 以采用其他不同于在此描述的其他方式來實(shí)施,因此,本發(fā)明的保護(hù)范圍并不受下面公開 的具體實(shí)施例的限制。
[0033] 圖1示出了根據(jù)本發(fā)明的實(shí)施例的樹形節(jié)點(diǎn)排序方法的流程圖。
[0034] 如圖1所示,根據(jù)本發(fā)明的實(shí)施例的樹形節(jié)點(diǎn)排序方法,包括如下步驟:步驟102, 數(shù)據(jù)中菜單的編號(hào)對(duì)所述菜單列表數(shù)據(jù)進(jìn)行排序;步驟104,列表數(shù)據(jù)中菜單的父標(biāo)識(shí)與 菜單的所述編號(hào)對(duì)排序后的所述菜單列表數(shù)據(jù)進(jìn)行重新排序;步驟106,重新排序后的所 述菜單列表數(shù)據(jù)轉(zhuǎn)化為樹形結(jié)構(gòu)數(shù)據(jù),以根據(jù)所述樹形結(jié)構(gòu)數(shù)據(jù)檢索對(duì)應(yīng)的父節(jié)點(diǎn)和子節(jié) 點(diǎn);步驟108,根據(jù)所述父節(jié)點(diǎn)與所述子節(jié)點(diǎn)對(duì)所述樹形結(jié)構(gòu)數(shù)據(jù)逐層展開,并將展開后的 數(shù)據(jù)轉(zhuǎn)化為目標(biāo)菜單列表數(shù)據(jù)。
[0035] 在該技術(shù)方案中,通過對(duì)排序后的菜單列表數(shù)據(jù)進(jìn)行重新排序,這樣菜單列表數(shù) 據(jù)被組裝成樹形結(jié)構(gòu)數(shù)據(jù)時(shí),就可以按順序從菜單列表數(shù)據(jù)取數(shù)據(jù),不需要再遞歸遍歷樹 形結(jié)構(gòu)數(shù)據(jù)中同一個(gè)父菜單,這大大地縮短了組裝樹形結(jié)構(gòu)數(shù)據(jù)的時(shí)間,同時(shí)減少了遞歸 程序的應(yīng)用,極大地加快了排序速度,縮短了排序時(shí)間,可以有效地提高用戶的排序體驗(yàn)。
[0036] 在上述技術(shù)方案中,優(yōu)選地,還包括:將重新排序后的所述菜單列表數(shù)據(jù)轉(zhuǎn)化為樹 形結(jié)構(gòu)數(shù)據(jù),具體包括:根據(jù)重新排序后的所述菜單列表數(shù)據(jù),建立字典表,并向所述字典 表中添加所述菜單列表數(shù)據(jù)中的菜單,以及在所述字典表添加完成時(shí),根據(jù)字典表標(biāo)識(shí)逐 層獲取所述字典表中的所述菜單列表數(shù)據(jù),并將所述菜單列表數(shù)據(jù)轉(zhuǎn)化為所述樹形結(jié)構(gòu)數(shù) 據(jù)。
[0037] 在該技術(shù)方案中,由于從字典表中取數(shù)據(jù)時(shí)間是遞歸減半的,且字典表中有索引 (字典表標(biāo)識(shí)),這樣在利用字典表逐層返回的菜單建立樹形數(shù)據(jù)結(jié)構(gòu)時(shí),可以加快索引 字典表菜單列表數(shù)據(jù)中數(shù)據(jù)的速度,進(jìn)一步地加快了菜單列表數(shù)據(jù)轉(zhuǎn)化為樹形結(jié)構(gòu)數(shù)據(jù)速 度,最終可以達(dá)到提商排序速率的目的。
[0038] 在上述技術(shù)方案中,優(yōu)選地,還包括:每一所述字典表都對(duì)應(yīng)一所述字典表標(biāo)識(shí), 且每一所述字典表都由父標(biāo)識(shí)相同的菜單組成。
[0039] 在該技術(shù)方案中,每個(gè)字典表都是一個(gè)字典表標(biāo)識(shí)(KEY),以便于快速檢索字典表 中的菜單數(shù)據(jù),且每一字典表都對(duì)應(yīng)一個(gè)按照SupID,iOrder正序排列的菜單列表,每一字 典表中的菜單都屬于同一層菜單,這樣可以保證字典表中的菜單是順序排列的,并可以有 效地提高字典表檢索數(shù)據(jù)的效率。
[0040] 在上述技術(shù)方案中,優(yōu)選地,還包括:在向當(dāng)前字典表中添加菜單時(shí),判斷當(dāng)前菜 單與所述當(dāng)前字典表中的菜單的父標(biāo)識(shí)是否相同,
[0041] 在判定結(jié)果為是時(shí),將所述當(dāng)前菜單添加到所述當(dāng)前字典表中。
[0042] 在該技術(shù)方案中,向當(dāng)前字典表中添加菜單時(shí),判斷當(dāng)前菜單與所述當(dāng)前字典表 中的菜單的父標(biāo)識(shí)是否相同,在判定結(jié)果為是時(shí),才將當(dāng)前菜單添加到當(dāng)前字典表中,這樣 可以保證每一字典表中的菜單都屬于同一層菜單,且每個(gè)字典表都有唯一的一個(gè)字典表標(biāo) 識(shí),以便于可以正確無誤地從字典表中索引每一層菜單。
[0043] 在上述技術(shù)方案中,優(yōu)選地,還包括:在判定結(jié)果為否時(shí),新建一字典表,并將所述 當(dāng)前菜單添加到所述新建的字典表中。
[0044] 在該技術(shù)方案中,在當(dāng)前菜單與當(dāng)前字典表中已有菜單的父標(biāo)識(shí)不相同,意味著 當(dāng)前字典表已添加完成,需要重新初始化一字典表,這樣可以保證每一字典表中的菜單都 屬于同一層菜單,且每個(gè)字典表都有唯一的一個(gè)字典表標(biāo)識(shí)。圖2不出了根據(jù)本發(fā)明的實(shí) 施例的樹形節(jié)點(diǎn)排序裝置的結(jié)構(gòu)示意圖。
[0045] 如圖2所示,根據(jù)本發(fā)明的實(shí)施例的樹形節(jié)點(diǎn)排序裝置200,包括:排序單元202, 根據(jù)菜單列表數(shù)據(jù)中菜單的編號(hào)對(duì)所述菜單列表數(shù)據(jù)進(jìn)行排序并根據(jù)所述菜單列表數(shù)據(jù) 中菜單的父標(biāo)識(shí)與菜單的所述編號(hào)對(duì)排序后的所述菜單列表數(shù)據(jù)進(jìn)行重新排序;第一轉(zhuǎn)化 單元204,連接至所述排序單元202,將重新排序后的所述菜單列表數(shù)據(jù)轉(zhuǎn)化為樹形結(jié)構(gòu)數(shù) 據(jù);檢索單元206,連接至所述轉(zhuǎn)化單元,根據(jù)所述樹形結(jié)構(gòu)數(shù)據(jù)檢索對(duì)應(yīng)的父節(jié)點(diǎn)和子節(jié) 點(diǎn);展開單元208,連接至所述檢索單元206,根據(jù)所述父節(jié)點(diǎn)與所述子節(jié)點(diǎn)對(duì)所述樹形結(jié) 構(gòu)數(shù)據(jù)逐層展開;第二轉(zhuǎn)化單元210,連接至所述展開單元208,將展開后的數(shù)據(jù)轉(zhuǎn)化為目 標(biāo)菜單列表數(shù)據(jù)。
[0046] 在該技術(shù)方案中,通過對(duì)排序后的菜單列表數(shù)據(jù)進(jìn)行重新排序,這樣菜單列表數(shù) 據(jù)被組裝成樹形結(jié)構(gòu)數(shù)據(jù)時(shí),就可以按順序從菜單列表數(shù)據(jù)取數(shù)據(jù),不需要再遞歸遍歷樹 形結(jié)構(gòu)數(shù)據(jù)中同一個(gè)父菜單,這大大地縮短了組裝樹形結(jié)構(gòu)數(shù)據(jù)的時(shí)間,同時(shí)減少了遞歸 程序的應(yīng)用,極大地加快了排序速度,縮短了排序時(shí)間,可以有效地提高用戶的排序體驗(yàn)。
[0047] 在上述技術(shù)方案中,優(yōu)選地,所述第一轉(zhuǎn)化單元204包括:建立單元2042,根據(jù)重 新排序后的所述菜單列表數(shù)據(jù),建立字典表;添加單元2044,向所述字典表中添加所述菜 單列表數(shù)據(jù)中的菜單,以及所述第一轉(zhuǎn)化單元204還用于:在所述字典表添加完成時(shí),根據(jù) 字典表標(biāo)識(shí)逐層獲取所述字典表中的所述菜單列表數(shù)據(jù),并將所述菜單列表數(shù)據(jù)轉(zhuǎn)化為所 述樹形結(jié)構(gòu)數(shù)據(jù)。
[0048] 在該技術(shù)方案中,由于從字典表中取數(shù)據(jù)時(shí)間是遞歸減半的,且字典表中有索引 (字典表標(biāo)識(shí)),這樣在利用字典表逐層返回的菜單建立樹形數(shù)據(jù)結(jié)構(gòu)時(shí),可以加快索引 字典表菜單列表數(shù)據(jù)中數(shù)據(jù)的速度,進(jìn)一步地加快了菜單列表數(shù)據(jù)轉(zhuǎn)化為樹形結(jié)構(gòu)數(shù)據(jù)速 度,最終可以達(dá)到提商排序速率的目的。
[0049] 在上述技術(shù)方案中,優(yōu)選地,還包括:組成單元212,每一所述字典表都對(duì)應(yīng)一所 述字典表標(biāo)識(shí),且每一所述字典表都由父標(biāo)識(shí)相同的菜單組成。
[0050] 在該技術(shù)方案中,每個(gè)字典表都是一個(gè)字典表標(biāo)識(shí)(KEY),以便于快速檢索字典表 中的菜單數(shù)據(jù),且每一字典表都對(duì)應(yīng)一個(gè)按照SupID,iOrder正序排列的菜單列表,每一字 典表中的菜單都屬于同一層菜單,這樣可以保證字典表中的菜單是順序排列的,并可以有 效地提高字典表檢索數(shù)據(jù)的效率。
[0051] 在上述技術(shù)方案中,優(yōu)選地,還包括:所述添加單元2044包括:判斷單元20442, 在向當(dāng)前字典表中添加菜單時(shí),判斷當(dāng)前菜單與所述當(dāng)前字典表中的菜單的父標(biāo)識(shí)是否相 同,并在判定結(jié)果為是時(shí),將所述當(dāng)前菜單添加到所述當(dāng)前字典表中。
[0052] 在該技術(shù)方案中,向當(dāng)前字典表中添加菜單時(shí),判斷當(dāng)前菜單與所述當(dāng)前字典表 中的菜單的父標(biāo)識(shí)是否相同,在判定結(jié)果為是時(shí),才將當(dāng)前菜單添加到當(dāng)前字典表中,這樣 可以保證每一字典表中的菜單都屬于同一層菜單,且每個(gè)字典表都有唯一的一個(gè)字典表標(biāo) 識(shí),以便于可以正確無誤地從字典表中索引每一層菜單。
[0053] 在上述技術(shù)方案中,優(yōu)選地,還包括:所述建立單元2042還用于在判定結(jié)果為否 時(shí),新建一字典表,以及所述添加單元2044還用于,在判定結(jié)果為否時(shí),將所述當(dāng)前菜單添 加到所述新建的字典表中。
[0054] 在該技術(shù)方案中,在當(dāng)前菜單與當(dāng)前字典表中已有菜單的父標(biāo)識(shí)不相同,意味著 當(dāng)前字典表已添加完成,需要重新初始化一字典表,這樣可以保證每一字典表中的菜單都 屬于同一層菜單,且每個(gè)字典表都有唯一的一個(gè)字典表標(biāo)識(shí)。圖3不出了根據(jù)本發(fā)明的實(shí) 施例的樹形節(jié)點(diǎn)排序方法的一個(gè)菜單的樹形結(jié)構(gòu)的示意圖。
[0055] 如圖3所示,圖3示出了根據(jù)本發(fā)明的實(shí)施例的樹形節(jié)點(diǎn)排序方法的一個(gè)菜單的 樹形結(jié)構(gòu),該菜單的存儲(chǔ)結(jié)構(gòu)如表1所示:
[0056] 表 1
[0057]
【權(quán)利要求】
1. 一種樹形節(jié)點(diǎn)排序方法,其特征在于,包括: 根據(jù)菜單列表數(shù)據(jù)中菜單的編號(hào)對(duì)所述菜單列表數(shù)據(jù)進(jìn)行排序; 根據(jù)所述菜單列表數(shù)據(jù)中菜單的父標(biāo)識(shí)與菜單的所述編號(hào)對(duì)排序后的所述菜單列表 數(shù)據(jù)進(jìn)行重新排序; 將重新排序后的所述菜單列表數(shù)據(jù)轉(zhuǎn)化為樹形結(jié)構(gòu)數(shù)據(jù),以根據(jù)所述樹形結(jié)構(gòu)數(shù)據(jù)檢 索對(duì)應(yīng)的父節(jié)點(diǎn)和子節(jié)點(diǎn); 根據(jù)所述父節(jié)點(diǎn)與所述子節(jié)點(diǎn)對(duì)所述樹形結(jié)構(gòu)數(shù)據(jù)逐層展開,并將展開后的數(shù)據(jù)轉(zhuǎn)化 為目標(biāo)菜單列表數(shù)據(jù)。
2. 根據(jù)權(quán)利要求1所述的樹形節(jié)點(diǎn)排序方法,其特征在于,將重新排序后的所述菜單 列表數(shù)據(jù)轉(zhuǎn)化為樹形結(jié)構(gòu)數(shù)據(jù),具體包括: 根據(jù)重新排序后的所述菜單列表數(shù)據(jù),建立字典表,并向所述字典表中添加所述菜單 列表數(shù)據(jù)中的菜單,以及 在所述字典表添加完成時(shí),根據(jù)字典表標(biāo)識(shí)逐層獲取所述字典表中的所述菜單列表數(shù) 據(jù),并將所述菜單列表數(shù)據(jù)轉(zhuǎn)化為所述樹形結(jié)構(gòu)數(shù)據(jù)。
3. 根據(jù)權(quán)利要求2所述的樹形節(jié)點(diǎn)排序方法,其特征在于,還包括: 每一所述字典表都對(duì)應(yīng)一所述字典表標(biāo)識(shí),且每一所述字典表都由父標(biāo)識(shí)相同的菜單 組成。
4. 根據(jù)權(quán)利要求2所述的樹形節(jié)點(diǎn)排序方法,其特征在于,還包括: 在向當(dāng)前字典表中添加菜單時(shí),判斷當(dāng)前菜單與所述當(dāng)前字典表中的菜單的父標(biāo)識(shí)是 否相同, 在判定結(jié)果為是時(shí),將所述當(dāng)前菜單添加到所述當(dāng)前字典表中。
5. 根據(jù)權(quán)利要求4所述的樹形節(jié)點(diǎn)排序方法,其特征在于, 在判定結(jié)果為否時(shí),新建一字典表,并將所述當(dāng)前菜單添加到所述新建的字典表中。
6. -種樹形節(jié)點(diǎn)排序裝置,其特征在于,包括: 排序單元,根據(jù)菜單列表數(shù)據(jù)中菜單的編號(hào)對(duì)所述菜單列表數(shù)據(jù)進(jìn)行排序并根據(jù)所述 菜單列表數(shù)據(jù)中菜單的父標(biāo)識(shí)與菜單的所述編號(hào)對(duì)排序后的所述菜單列表數(shù)據(jù)進(jìn)行重新 排序; 第一轉(zhuǎn)化單元,連接至所述排序單元,將重新排序后的所述菜單列表數(shù)據(jù)轉(zhuǎn)化為樹形 結(jié)構(gòu)數(shù)據(jù); 檢索單元,連接至所述轉(zhuǎn)化單元,根據(jù)所述樹形結(jié)構(gòu)數(shù)據(jù)檢索對(duì)應(yīng)的父節(jié)點(diǎn)和子節(jié) 占. 展開單元,連接至所述檢索單元,根據(jù)所述父節(jié)點(diǎn)與所述子節(jié)點(diǎn)對(duì)所述樹形結(jié)構(gòu)數(shù)據(jù) 逐層展開; 第二轉(zhuǎn)化單元,連接至所述展開單元,將展開后的數(shù)據(jù)轉(zhuǎn)化為目標(biāo)菜單列表數(shù)據(jù)。
7. 根據(jù)權(quán)利要求6所述的樹形節(jié)點(diǎn)排序裝置,其特征在于,所述第一轉(zhuǎn)化單元包括: 建立單元,根據(jù)重新排序后的所述菜單列表數(shù)據(jù),建立字典表; 添加單元,向所述字典表中添加所述菜單列表數(shù)據(jù)中的菜單,以及所述第一轉(zhuǎn)化單元 還用于: 在所述字典表添加完成時(shí),根據(jù)字典表標(biāo)識(shí)逐層獲取所述字典表中的所述菜單列表數(shù) 據(jù),并將所述菜單列表數(shù)據(jù)轉(zhuǎn)化為所述樹形結(jié)構(gòu)數(shù)據(jù)。
8. 根據(jù)權(quán)利要求7所述的樹形節(jié)點(diǎn)排序裝置,其特征在于,還包括: 組成單元,每一所述字典表都對(duì)應(yīng)一所述字典表標(biāo)識(shí),且每一所述字典表都由父標(biāo)識(shí) 相同的菜單組成。
9. 根據(jù)權(quán)利要求6所述的樹形節(jié)點(diǎn)排序裝置,其特征在于,所述添加單元包括: 判斷單元,在向當(dāng)前字典表中添加菜單時(shí),判斷當(dāng)前菜單與所述當(dāng)前字典表中的菜單 的父標(biāo)識(shí)是否相同,并在判定結(jié)果為是時(shí),將所述當(dāng)前菜單添加到所述當(dāng)前字典表中。
10. 根據(jù)權(quán)利要求9所述的樹形節(jié)點(diǎn)排序裝置,其特征在于, 所述建立單元還用于在判定結(jié)果為否時(shí),新建一字典表,以及 所述添加單元還用于,在判定結(jié)果為否時(shí),將所述當(dāng)前菜單添加到所述新建的字典表 中。
【文檔編號(hào)】G06F17/30GK104102694SQ201410289591
【公開日】2014年10月15日 申請(qǐng)日期:2014年6月24日 優(yōu)先權(quán)日:2014年6月24日
【發(fā)明者】張雋永, 楊慶峰 申請(qǐng)人:用友優(yōu)普信息技術(shù)有限公司