GoFrame?gtree樹形結(jié)構(gòu)的使用技巧示例
樹形結(jié)構(gòu)
樹形結(jié)構(gòu)gtree具有以下特點(diǎn):
- 支持排序,支持有序遍歷
- 內(nèi)存占用低
- 復(fù)雜度穩(wěn)定
- 適合大數(shù)據(jù)量存儲
一圖勝千言
查詢源碼
使用場景
- 關(guān)聯(lián)數(shù)組場景
- 大數(shù)據(jù)量內(nèi)存CRUD
- 排序鍵值對(后面的示例就是前序遍歷和后序遍歷)
使用入門
我們以實例化紅黑樹為例(實例化B樹、高度平衡樹也是一樣的方式)
常用方法
Set() 賦值
Keys() 獲得鍵列表
Values() 獲得值列表
Contains() 判斷是否包含指定的key
t.Print() 可以直接打印樹形結(jié)構(gòu)
也可以通過常規(guī)方式打印樹形結(jié)構(gòu):fmt.Println(t.String())
Iterator() 相關(guān)的方法進(jìn)行樹的遍歷
Clear() 清空數(shù)
IsEmpty() 判斷數(shù)是否為空
示例代碼
package main import ( "fmt" "github.com/gogf/gf/container/gtree" "github.com/gogf/gf/util/gutil" ) func main() { //實例化tree t := gtree.NewRedBlackTree(gutil.ComparatorInt) t.Set(-1, -1) for i := 0; i < 10; i++ { t.Set(i, i*10) } fmt.Println("鍵列表:", t.Keys()) fmt.Println("值列表:", t.Values()) // 查詢是否包含 fmt.Println(t.Contains(-1)) fmt.Println("下面是使用t.Print()打印的樹形結(jié)構(gòu):") t.Print() //打印出樹形結(jié)構(gòu) fmt.Println("下面是使用fmt.Println(t.String())打印的樹形結(jié)構(gòu):") fmt.Println(t.String()) //和上面一樣 也是打印出了樹形結(jié)構(gòu) t.IteratorDesc(func(key, value interface{}) bool { fmt.Println("倒序遍歷:", key, value) return true }) t.Clear() fmt.Println(t.IsEmpty()) //true }
打印結(jié)果
技巧
最近幾篇文章都提到了數(shù)據(jù)類型的排序,GoFrame提供的gutil提供了基本數(shù)據(jù)類型常用的比較方法。
(因為今天上午讀了一篇閱讀源碼的文章,深受啟發(fā),所以自己也要多多讀讀源碼了,看下大佬們是怎么寫的代碼的。)
以上就是GoFrame gtree樹形結(jié)構(gòu)的使用技巧示例的詳細(xì)內(nèi)容,更多關(guān)于GoFrame gtree樹形結(jié)構(gòu)的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
golang string、int、int64 float 互相轉(zhuǎn)換方式
這篇文章主要介紹了golang string、int、int64 float 互相轉(zhuǎn)換方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-07-07Go語言實戰(zhàn)之實現(xiàn)一個簡單分布式系統(tǒng)
如今很多云原生系統(tǒng)、分布式系統(tǒng),例如?Kubernetes,都是用?Go?語言寫的,這是因為?Go?語言天然支持異步編程。本篇文章將介紹如何用?Go?語言編寫一個簡單的分布式系統(tǒng),需要的小伙伴開業(yè)跟隨小編一起學(xué)習(xí)一下2022-10-10構(gòu)建Golang應(yīng)用最小Docker鏡像的實現(xiàn)
這篇文章主要介紹了構(gòu)建Golang應(yīng)用最小Docker鏡像的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-05-05