Skip to content

dpwgc/go-trietree

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Go Trie Tree

Go 字典树实现


使用示例

  • 导入包
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}

About

Go 字典树实现

Topics

Resources

Stars

Watchers

Forks

Packages

No packages published

Languages