如何構建邏輯清晰的可拖拽樹的資料結構

2022-05-09 03:48:13 字數 1242 閱讀 2747

在為知筆記上的每日計畫已經有好幾天沒有寫實際內容了,抓狂臉。時間真是過得超級快呀,這幾天雙十一,瘋狂的看喜歡的東西和看快遞。其實並不是為了雙十一降價而買東西,而是近來本來就有買東西的打算,而且撞到了雙十一前,那就乾脆放購物車裡好了,還有就是半年沒見降價的零食也打折啦啦啦~~^_^。好喜歡雙十一結束後**的宣傳片《再見雙十一》,接下來的這個星期,就靜靜的等待幸福來敲門~

言歸正傳,今天來分享一下關於如何構建資料結構使得頁面邏輯更為清晰的思路。

事情的起因是這樣的,boss安排我做乙個列表拖拽頁面,為了更貼切我們的ui和產品的需求,除了美化的滾動條使用jquery.nicescroll外掛程式外,不到萬不得已不允許用其他外掛程式(來點題外話:感覺我們公司一般不允許用外掛程式,用boss的話來說就是相信自己能寫出來,根據專案寫出來的才是最貼切最精煉的**。不要一開始就使用外掛程式,如果實在寫不出來而使用外掛程式,也得完全看懂**或者使用說明,不要存在一知半解的僥倖心理,這樣相當於給專案埋下定時炸彈)。

我起初是用了物件加陣列,各種全域性變數加起來寫著寫著很容易把自己的**寫混了,然後把自己的困惑和boss說了之後,boss給我提供了一種新的思路,讓我豁然開朗,立即把頁面重寫了一遍。好東西就是要和大家分享的,下面我來分享一下這個方法。

把這些功能歸類,我們可以看到拖拽,刪除其實是對結構的操作;編輯,檢視是對資料的操作;複製,新增子節點這些既要求對樹操作,要求對資料進行操作。

當我們把頁面的結構和渲染分開來的時候,頁面的脈絡會變得很清晰。

我們可以就事論事把這抽象的資料想象成,並構建成一棵樹,所有對樹結構的修改都在樹的操作上完成,而所有對於節點內容的修改,在另一組資料上完成,這樣能使頁面的結構更為清晰,而且也便於檢查和維護,不會存在定義了一堆變數,到最後,自己都忘了這個變數是用來幹嘛的。

假設我們從後台獲取到的資料是以陣列的形式返回的,我們稱這個陣列為「原始陣列」,「原始陣列」中每一項代表乙個節點的詳細資訊,那麼具體操作可以分為以下步驟:

1、構建樹:建立乙個「樹」物件,把拿到的「原始陣列」整理存入。「原始陣列」每一項自動分配乙個虛擬id(從1開始,0作為最初的虛擬樹根)作為鍵,鍵指向的值是乙個至少包含 parentid(指向父節點),children陣列(指向孩子節點,有順序),nodetype(標示是或者不是葉子節點)的物件。

這樣我們想要對樹的結構進行修改時,只需要修改「樹」物件,而我們需要修改節點資訊的時候,只需要修改「衛星資料」,這樣可以大大減少**量,並且能對整個頁面結構一目了然。

學習如何構建乙個高效且可伸縮的快取

我們平時處理高併發的請求處理時,伺服器的壓力會很大。我們常做的就是構建乙個高效的可伸縮的快取來減輕伺服器的壓力。1.第一次嘗試 分析 使用 hashmap充當cache。public inte ce computable public class memoizer1implements comput...

如何加快R樹構建的過程暨答覆debogger

感謝 debogger 在我的文章 rtree.c 最新源 cheungmine 同學的源 確實不錯,尤其是執行緒安全的.我有500萬的mbr,每次建立r樹需要3 分鐘,能不能把建立好的樹儲存到乙個檔案,然後下次我好很快的讀取,再次形成原來的樹?就是 serialize r tree,然後deser...

如何加快R樹構建的過程暨答覆debogger

感謝 debogger 在我的文章 rtree.c 最新源 cheungmine 同學的源 確實不錯,尤其是執行緒安全的.我有500萬的mbr,每次建立r樹需要3 分鐘,能不能把建立好的樹儲存到乙個檔案,然後下次我好很快的讀取,再次形成原來的樹?就是 serialize r tree,然後deser...