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

相关文章
|
7月前
|
程序员 测试技术
程序员的“Bug之旅”:为何无法一次性写出完美代码?
程序员在软件开发过程中难以一次性写出完美代码,需要不断修改和调试,即“改Bug”,这是由多个因素共同作用的结果。技术层面的复杂性、管理和流程上的不足以及个人能力和认知的局限性都是导致这一现象的重要原因。然而,这并不意味着无法避免或改进。通过加强需求管理、建立有效的版本控制和测试机制、推动团队知识共享以及鼓励代码审查和自我反思等措施,可以降低改Bug的频率和成本,提高软件开发的效率和质量。辩证地看待这一问题,既要理解其存在的合理性,也要积极寻求改进之道,以实现更好的产品和服务。
65 2
|
JavaScript 前端开发 数据库
让你少踩坑的fastadmin教程(3)
让你少踩坑的fastadmin教程
1444 0
让你少踩坑的fastadmin教程(3)
|
7月前
|
前端开发 算法 JavaScript
2024前端学习计划-程序员库里
前端学习计划 关键词:🔥🔥🔥 前端面试、前端算法、前端项目实战,独有前端面试题详解,前端面试刷题必备,1000+前端面试真题,Html、Css、JavaScript、Vue、React、Node、TypeScript、Webpack、算法、网络与安全、浏览器、低代码、前端脚手架
146 0
2024前端学习计划-程序员库里
|
JavaScript 程序员 API
程序员为什么会在开发中阅读源码?
作为程序员的大家想必都会在开发的时候,去阅读源码。在实际开发中,开发者经常需要阅读和理解源代码,阅读源码是一种非常有用的技能,它可以帮助程序员更好地了解代码、解决问题、学习新技术和提高编码能力。阅读源码的过程实质上是对软件构建技术和架构深度的一种持续学习和理解。阅读源码可以揭示代码的内在逻辑,这被看作是对技术深度理解的一种体现,它能提高我们对技术的理解程度。结合阅读《Node 中的 AsyncLocalStorage 的前世今生和未来》这篇文章之后,我深刻体会到了作为开发者阅读源码的重要性和必要性。通过阅读这篇文章,我对 AsyncLocalStorage 的实现原理和使用方式有了更深入的理解
235 3
程序员为什么会在开发中阅读源码?
|
缓存 算法 安全
程序员写代码为什么要阅读源码?
阅读一篇技术文章,畅聊一个技术话题。本期文章推荐的是《Node 中的 AsyncLocalStorage 的前世今生和未来》,一起来聊聊开发者阅读源码的这件事。阅读源码的过程实质上是对软件构建技术和架构深度的一种持续学习和理解。阅读源码可以揭示代码的内在逻辑,可以对技术深度的理解,也能提高对技术的理解程度。然而,仅仅阅读源码并不能代替实践操作,因为通过实践,可以更加全面的理解代码的深度和进展。
155 1
|
存储 小程序 容器
想做个答题类的微信小游戏?读这篇文章就够了
本文重要内容包含答题类小游戏的制作原理和制作方法,在掌握实现原理和方法后,你也能够根据自己的需要,制作自己的答题类小游戏。 如果你没有任何的游戏开发经验,欢迎阅读我的“人人都能做游戏”系列教程,它会手把手的教你做出自己的第一个小游戏。
222 0
|
SQL 测试技术 数据库
软件测试|SQL数据库相关操作,这篇文章就够了
软件测试|SQL数据库相关操作,这篇文章就够了
|
Unix 编译器 程序员
如何写出高质量的代码 -- 给所有编程学习者的一个建议
如何写出高质量的代码 -- 给所有编程学习者的一个建议
170 0
如何写出高质量的代码 -- 给所有编程学习者的一个建议
|
算法 Java 中间件
阅读优秀项目源码很重要,分享一个读源码的方法,小白都能学会
作为一个程序员,经常需要读一些开源项目的源码。同时呢,读源码对我们也有很多好处: 1.提升自己 2.修复 Bug 3.增加新功能
阅读优秀项目源码很重要,分享一个读源码的方法,小白都能学会