- 导入包
go get github.com/dpwgc/go-trietree
- 示例程序
package main
import (
"fmt"
"github.com/dpwgc/go-trietree"
)
type Value struct {
ID int
}
func main() {
// 新建一个并发安全的字典树,并装配数据
tree := trietree.NewSafe(Value{}).
SPut("123456", Value{ID: 123456}).
SPut("12345678", Value{ID: 12345678}).
SPut("1234", Value{ID: 1234}).
SPut("12", Value{ID: 12})
// 查询树中含有'12'前缀的值
fmt.Println("\n> 查询树中含有'12'前缀的值")
query := tree.SInclude("12")
fmt.Println("是否存在:", query.Exist())
fmt.Println("数量:", query.Count())
fmt.Println("第一个:", query.First().Value)
fmt.Println("最后一个:", query.Last().Value)
for _, v := range query.List() {
fmt.Println(v.Value)
}
// 查询树中被'1234'前缀包含的值
fmt.Println("\n> 查询树中被'1234'前缀包含的值")
query = tree.SIncluded("1234")
fmt.Println("是否存在:", query.Exist())
fmt.Println("数量:", query.Count())
fmt.Println("第一个:", query.First().Value)
fmt.Println("最后一个:", query.Last().Value)
for _, v := range query.List() {
fmt.Println(v.Value)
}
// 查询树中含有'12'前缀的值,限制只返回2个结果
fmt.Println("\n> 查询树中含有'12'前缀的值,限制只返回2个结果")
for _, v := range tree.SInclude("12").Limit(2).List() {
fmt.Println(v.Value)
}
// 查询树中被'123456'前缀包含的值,限制只返回2个结果
fmt.Println("\n> 查询树中被'123456'前缀包含的值,限制只返回2个结果")
for _, v := range tree.SIncluded("123456").Limit(2).List() {
fmt.Println(v.Value)
}
// 获取树中键为'12345678'的值
fmt.Println("\n> 获取树中键为'12345678'的值")
fmt.Println(tree.SGet("12345678").Value)
// 删除树中键为'12345678'的值
fmt.Println("\n> 删除树中键为'12345678'的值")
tree.SRemove("12345678")
// 删除后再次尝试获取树中键为'12345678'的值
fmt.Println("\n> 删除后再次尝试获取树中键为'12345678'的值")
fmt.Println("删除后再次查询的结果:")
for _, v := range tree.SInclude("").List() {
fmt.Println(v.Value)
}
// 删除树中键为'1234'的值以及它的下属分支
fmt.Println("\n> 删除树中键为'1234'的值以及它的下属分支")
tree.SRemoveAll("1234")
fmt.Println("删除后再次查询的结果:")
for _, v := range tree.SInclude("").List() {
fmt.Println(v.Value)
}
}- 执行结果
> 查询树中含有'12'前缀的值
是否存在: true
数量: 4
第一个: {12}
最后一个: {12345678}
{12}
{1234}
{123456}
{12345678}
> 查询树中被'1234'前缀包含的值
是否存在: true
数量: 2
第一个: {12}
最后一个: {1234}
{12}
{1234}
> 查询树中含有'12'前缀的值,限制只返回2个结果
{12}
{1234}
> 查询树中被'123456'前缀包含的值,限制只返回2个结果
{12}
{1234}
> 获取树中键为'12345678'的值
{12345678}
> 删除树中键为'12345678'的值
> 删除后再次尝试获取树中键为'12345678'的值
删除后再次查询的结果:
{12}
{1234}
{123456}
> 删除树中键为'1234'的值以及它的下属分支
删除后再次查询的结果:
{12}