GoFrame gtree-基本使用

2022-04-08 15:33 更新

基本使用

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)

	// 設(shè)置鍵值對
	for i := 0; i < 10; i++ {
		m.Set(i, i*10)
	}
	// 查詢大小
	fmt.Println(m.Size())
	// 批量設(shè)置鍵值對(不同的數(shù)據(jù)類型對象參數(shù)不同)
	m.Sets(map[interface{}]interface{}{
		10: 10,
		11: 11,
	})
	fmt.Println(m.Size())

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

	// 查詢鍵值
	fmt.Println(m.Get(1))

	// 刪除數(shù)據(jù)項
	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())
}

執(zhí)行后,輸出結(jié)果為:

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

前序/后續(xù)遍歷

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
	})
	// 后續(xù)遍歷
	fmt.Println("DESC:")
	tree.IteratorDesc(func(key, value interface{}) bool {
		fmt.Println(key, value)
		return true
	})
}

執(zhí)行后,輸出結(jié)果為:

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


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號