GoFrame gtree 使用入门 | 养成读源码的好习惯

简介: GoFrame gtree 使用入门 | 养成读源码的好习惯

树形结构


树形结构gtree具有以下特点:


  1. 支持排序,支持有序遍历
  2. 内存占用低
  3. 复杂度稳定
  4. 适合大数据量存储


一图胜千言


微信图片_20221112225515.jpg


查询源码


微信图片_20221112225523.jpg


使用场景


  1. 关联数组场景
  2. 大数据量内存CRUD
  3. 排序键值对(后面的示例就是前序遍历和后序遍历)


使用入门


我们以实例化红黑树为例(实例化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
}


打印结果


微信图片_20221112225526.jpg


技巧


最近几篇文章都提到了数据类型的排序,GoFrame提供的gutil提供了基本数据类型常用的比较方法。

(因为今天上午读了一篇阅读源码的文章,深受启发,所以自己也要多多读读源码了,看下大佬们是怎么写的代码的。)


微信图片_20221112225530.jpg

相关文章
|
JavaScript 前端开发 数据库
让你少踩坑的fastadmin教程(3)
让你少踩坑的fastadmin教程
1310 0
让你少踩坑的fastadmin教程(3)
|
11月前
|
数据可视化 项目管理 C++
|
JavaScript 程序员 API
程序员为什么会在开发中阅读源码?
作为程序员的大家想必都会在开发的时候,去阅读源码。在实际开发中,开发者经常需要阅读和理解源代码,阅读源码是一种非常有用的技能,它可以帮助程序员更好地了解代码、解决问题、学习新技术和提高编码能力。阅读源码的过程实质上是对软件构建技术和架构深度的一种持续学习和理解。阅读源码可以揭示代码的内在逻辑,这被看作是对技术深度理解的一种体现,它能提高我们对技术的理解程度。结合阅读《Node 中的 AsyncLocalStorage 的前世今生和未来》这篇文章之后,我深刻体会到了作为开发者阅读源码的重要性和必要性。通过阅读这篇文章,我对 AsyncLocalStorage 的实现原理和使用方式有了更深入的理解
187 3
程序员为什么会在开发中阅读源码?
|
存储 小程序 容器
想做个答题类的微信小游戏?读这篇文章就够了
本文重要内容包含答题类小游戏的制作原理和制作方法,在掌握实现原理和方法后,你也能够根据自己的需要,制作自己的答题类小游戏。 如果你没有任何的游戏开发经验,欢迎阅读我的“人人都能做游戏”系列教程,它会手把手的教你做出自己的第一个小游戏。
199 0
|
JSON JavaScript API
让你少踩坑的fastadmin教程(2)
让你少踩坑的fastadmin教程
1283 0
让你少踩坑的fastadmin教程(2)
|
前端开发 JavaScript 关系型数据库
让你少踩坑的fastadmin教程(1)
让你少踩坑的fastadmin教程
1876 0
让你少踩坑的fastadmin教程(1)
|
安全 程序员 开发者
技术人总有想写文章的冲动却无疾而终?4个小Tips帮你快速上手!
技术人想写文章?还未下笔?来来来~助你打通任督二脉!
159 0
技术人总有想写文章的冲动却无疾而终?4个小Tips帮你快速上手!
|
XML 缓存 JSON
看SpringCloudEureka源码前懂得这些知识事半功倍
看SpringCloudEureka源码前懂得这些知识事半功倍
看SpringCloudEureka源码前懂得这些知识事半功倍