GoFrame gtree樹形結構的使用技巧示例

樹形結構

樹形結構gtree具有以下特點:

  • 支持排序,支持有序遍歷
  • 內存占用低
  • 復雜度穩定
  • 適合大數據量存儲

一圖勝千言

查詢源碼

使用場景

  • 關聯數組場景
  • 大數據量內存CRUD
  • 排序鍵值對(後面的示例就是前序遍歷和後序遍歷)

使用入門

我們以實例化紅黑樹為例(實例化B樹、高度平衡樹也是一樣的方式)

常用方法

Set() 賦值

Keys() 獲得鍵列表

Values() 獲得值列表

Contains() 判斷是否包含指定的key

t.Print() 可以直接打印樹形結構

也可以通過常規方式打印樹形結構:fmt.Println(t.String())

Iterator() 相關的方法進行樹的遍歷

Clear() 清空數

IsEmpty() 判斷數是否為空

示例代碼

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()打印的樹形結構:")
   t.Print() //打印出樹形結構
   fmt.Println("下面是使用fmt.Println(t.String())打印的樹形結構:")
   fmt.Println(t.String()) //和上面一樣 也是打印出瞭樹形結構
   t.IteratorDesc(func(key, value interface{}) bool {
      fmt.Println("倒序遍歷:", key, value)
      return true
   })
   t.Clear()
   fmt.Println(t.IsEmpty()) //true
}

打印結果

技巧

最近幾篇文章都提到瞭數據類型的排序,GoFrame提供的gutil提供瞭基本數據類型常用的比較方法。

(因為今天上午讀瞭一篇閱讀源碼的文章,深受啟發,所以自己也要多多讀讀源碼瞭,看下大佬們是怎麼寫的代碼的。)

以上就是GoFrame gtree樹形結構的使用技巧示例的詳細內容,更多關於GoFrame gtree樹形結構的資料請關註WalkonNet其它相關文章!

推薦閱讀: