返回

GoFrame gmap详解:hashmap、listmap、treemap使用技巧

后端

在Go语言中,我们经常需要处理各种类型的数据结构。GoFrame提供了丰富的类型,包括hashmap、listmap和treemap。这篇文章将重点介绍这三种数据结构的用法。

hashmap

hashmap是一种无序映射,它通过键值对存储数据。hashmap的优点是查找和插入操作的效率很高。但是,hashmap的缺点是返回的顺序是无序的。

用法:

package main

import (
	"fmt"

	gmap "github.com/mgenware/gmap"
)

func main() {
	m := gmap.NewHashMap()
	m.Set("key1", "value1")
	m.Set("key2", "value2")
	m.Set("key3", "value3")

	fmt.Println(m.Get("key1")) // value1
	fmt.Println(m.Get("key2")) // value2
	fmt.Println(m.Get("key3")) // value3

	// 遍历hashmap
	for key, value := range m.Iter() {
		fmt.Println(key, value)
	}
}

listmap

listmap是一种有序映射,它通过键值对存储数据。listmap的优点是返回的顺序是有序的,与输入的顺序一致。但是,listmap的缺点是查找和插入操作的效率比hashmap低。

用法:

package main

import (
	"fmt"

	gmap "github.com/mgenware/gmap"
)

func main() {
	m := gmap.NewListMap()
	m.Set("key1", "value1")
	m.Set("key2", "value2")
	m.Set("key3", "value3")

	fmt.Println(m.Get("key1")) // value1
	fmt.Println(m.Get("key2")) // value2
	fmt.Println(m.Get("key3")) // value3

	// 遍历listmap
	for key, value := range m.Iter() {
		fmt.Println(key, value)
	}
}

treemap

treemap是一种自然有序的映射,它通过键值对存储数据。treemap的优点是返回的顺序是自然升序排列的。但是,treemap的缺点是查找和插入操作的效率比hashmap和listmap低。

用法:

package main

import (
	"fmt"

	gmap "github.com/mgenware/gmap"
)

func main() {
	m := gmap.NewTreeMap()
	m.Set("key1", "value1")
	m.Set("key2", "value2")
	m.Set("key3", "value3")

	fmt.Println(m.Get("key1")) // value1
	fmt.Println(m.Get("key2")) // value2
	fmt.Println(m.Get("key3")) // value3

	// 遍历treemap
	for key, value := range m.Iter() {
		fmt.Println(key, value)
	}
}

总结

hashmap、listmap和treemap都是GoFrame中常用的数据结构,它们各有其优缺点。在实际应用中,我们需要根据具体的场景选择合适的类型。