日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學(xué)無先后,達(dá)者為師

網(wǎng)站首頁 編程語言 正文

GoFrame?gtree樹形結(jié)構(gòu)的使用技巧示例_Golang

作者:王中陽Go ? 更新時間: 2022-08-03 編程語言

樹形結(jié)構(gòu)

樹形結(jié)構(gòu)gtree具有以下特點:

  • 支持排序,支持有序遍歷
  • 內(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ā),所以自己也要多多讀讀源碼了,看下大佬們是怎么寫的代碼的。)

原文鏈接:https://juejin.cn/post/7106458930057855013

欄目分類
最近更新