Categories: GoFrame 教程

GoFrame gtree-基本使用

基本使用

package main

import (
 "fmt"
 "github.com/gogf/gf/v2/container/gtree"
 "github.com/gogf/gf/v2/util/gutil"
)

func main() {
 m := gtree.NewRedBlackTree(gutil.ComparatorInt)

 // 设置键值对
 for i := 0; i < 10; i++ {
  m.Set(i, i*10)
 }
 // 查询大小
 fmt.Println(m.Size())
 // 批量设置键值对(不同的数据类型对象参数不同)
 m.Sets(map[interface{}]interface{}{
  10: 10,
  11: 11,
 })
 fmt.Println(m.Size())

 // 查询是否存在
 fmt.Println(m.Contains(1))

 // 查询键值
 fmt.Println(m.Get(1))

 // 删除数据项
 m.Remove(9)
 fmt.Println(m.Size())

 // 批量删除
 m.Removes([]interface{}{10, 11})
 fmt.Println(m.Size())

 // 当前键名列表(随机排序)
 fmt.Println(m.Keys())
 // 当前键值列表(随机排序)
 fmt.Println(m.Values())

 // 查询键名,当键值不存在时,写入给定的默认值
 fmt.Println(m.GetOrSet(100, 100))

 // 删除键值对,并返回对应的键值
 fmt.Println(m.Remove(100))

 // 遍历map
 m.IteratorAsc(func(k interface{}, v interface{}) bool {
  fmt.Printf("%v:%v ", k, v)
  return true
 })
 fmt.Println()

 // 清空map
 m.Clear()

 // 判断map是否为空
 fmt.Println(m.IsEmpty())
}

执行后,输出结果为:

10
12
true
10
11
9
[0 1 2 3 4 5 6 7 8]
[0 10 20 30 40 50 60 70 80]
100
100
0:0 1:10 2:20 3:30 4:40 5:50 6:60 7:70 8:80
true

前序/后续遍历

package main

import (
 "fmt"
 "github.com/gogf/gf/v2/container/gtree"
 "github.com/gogf/gf/v2/util/gutil"
)

func main() {
 tree := gtree.NewAVLTree(gutil.ComparatorInt)
 for i := 0; i < 10; i++ {
  tree.Set(i, i*10)
 }
 // 打印树形
 tree.Print()
 // 前序遍历
 fmt.Println("ASC:")
 tree.IteratorAsc(func(key, value interface{}) bool {
  fmt.Println(key, value)
  return true
 })
 // 后续遍历
 fmt.Println("DESC:")
 tree.IteratorDesc(func(key, value interface{}) bool {
  fmt.Println(key, value)
  return true
 })
}

执行后,输出结果为:

AVLTree
│           ┌── 9
│       ┌── 8
│   ┌── 7
│   │   │   ┌── 6
│   │   └── 5
│   │       └── 4
└── 3
    │   ┌── 2
    └── 1
        └── 0

ASC:
0 0
1 10
2 20
3 30
4 40
5 50
6 60
7 70
8 80
9 90
DESC:
9 90
8 80
7 70
6 60
5 50
4 40
3 30
2 20
1 10
0 0

唐伯虎点蚊香

前端小白,想各位学习!

Share
Published by
唐伯虎点蚊香

Recent Posts

聊聊vue3中的defineProps

在Vue 3中,defineP…

1 周 ago

在 Chrome 中删除、允许和管理 Cookie

您可以选择删除现有 Cooki…

2 周 ago

自定义指令:聊聊vue中的自定义指令应用法则

今天我们来聊聊vue中的自定义…

3 周 ago

聊聊Vue中@click.stop和@click.prevent

一起来学下聊聊Vue中@cli…

4 周 ago

Nginx 基本操作:启动、停止、重启命令。

我们来学习Nginx基础操作:…

1 月 ago

Vue3:手动清理keep-alive组件缓存的方法

Vue3中手动清理keep-a…

1 月 ago