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 |