GoFrame?gtree樹形結(jié)構(gòu)的使用技巧示例
樹形結(jié)構(gòu)
樹形結(jié)構(gòu)gtree具有以下特點:
- 支持排序,支持有序遍歷
- 內(nèi)存占用低
- 復雜度穩(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)的方法進行樹的遍歷
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)的使用技巧示例的詳細內(nèi)容,更多關(guān)于GoFrame gtree樹形結(jié)構(gòu)的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Go?interface{}?轉(zhuǎn)切片類型的實現(xiàn)方法
本文主要介紹了Go?interface{}?轉(zhuǎn)切片類型的實現(xiàn)方法,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-02-02

