加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

Go map相关

发布时间:2020-12-16 09:20:06 所属栏目:大数据 来源:网络整理
导读:map Go 语言中的 map 是一种无序的,基于 key-value 的数据解构,在 Go 语言中 map 是引用类型,因此必须初始化后才能使用。 以下示例将展示如何声明一个 map 类型,以及如何简单使用。 需要注意的是 map 的 cap 可以进行自动扩容,但是我们应该在初始化 map

map

   Go语言中的map是一种无序的,基于key-value的数据解构,在Go语言中map是引用类型,因此必须初始化后才能使用。

   以下示例将展示如何声明一个map类型,以及如何简单使用。

   需要注意的是mapcap可以进行自动扩容,但是我们应该在初始化map的时候就给好适当的容量以提高性能。

package main

import (
	"fmt"
)

func main() {
	// 初始化一个map,key为string类型,value为int类型,容量为10组
	var m = make(map[string]int,10)
	// 进行填充数据
	m["first"] = 110
	m["second"] = 120
	m["last"] = 119
	// 取出value
	fmt.Println(m["first"]) // 110
}

声明填充

   在声明map时我们就可以对其填充一些数据,这在很多编程语言中都是被允许的,Go语言中也不例外。

package main

import (
	"fmt"
)

func main() {
	// 注意,不可指定cap
    var userInfo = map[string]string{
		"userName":"云崖先生","userAge":"18","userGender":"male",}
	fmt.Println(userInfo)
	// map[userAge:18 userGender:male userName:云崖先生]
}

判断key

   Go语言中有个判断map中键是否存在的特殊写法,格式如下:

value,ok := map[key]

   示例如下:

package main

import (
	"fmt"
)

func main() {
	// 注意,不可指定cap
    var userInfo = map[string]string{
		"userName":"云崖先生",}
	value,ok := userInfo["userHobby"]
	if ok{
		fmt.Println(value)
	}else{
		fmt.Println("没有该key")
	}

	fmt.Printf("%v n",value) //  一堆空格
	fmt.Printf("%v n",ok) // false
	
}

遍历map

   遍历map时应该使用range进行遍历,另外由于map中的数据是无序的,所以遍历的时候也是无序的。

package main

import (
	"fmt"
)

func main() {
	// 注意,不可指定cap
    var userInfo = map[string]string{
		"userName":"云崖先生",}
	for key,value := range userInfo{
		fmt.Printf("%v-%v n",key,value)
	}
}

   当只想遍历key时,可不指定value

顺序遍历

   由于map是无序的,所以如果我们想使用顺序遍历,则需要将key全部提取到一个slice中,遍历slice取出map中的value即可。

package main

import(
	"fmt"
	"sort"
)

func main() {
	m := map[string]string{
		"k-2": "第二个","k-5": "第五个","k-1": "第一个","k-4": "第四个","k-3": "第三个",}
	slice := make([]string,5) // 只能用切片,切片才能append
	for key := range(m){
		slice = append(slice,key)
	}
	sort.Strings(slice) // 排序
	for _,key := range(slice){
		fmt.Println(m[key])
	}
}

删除元素

   使用内建函数delete()可删除map中的键值对。

delete(map,key)

   示例演示:

package main

import (
	"fmt"
)

func main() {
	// 注意,不可指定cap
    var userInfo = map[string]string{
		"userName":"云崖先生",}
	delete(userInfo,"userGender")
	fmt.Println(userInfo)
	// map[userAge:18 userName:云崖先生]
}

切片的元素是map

   切片中的元素可以是map

package main

import (
	"fmt"
)

func main() {
	m := map[string]string{
		"k-2": "第二个",}
	slice := make([]map[string]string,1) // 该切片内部只能存储map
	slice = append(slice,m)
	fmt.Println(slice[0]["k-1"])
	fmt.Println(slice[0]["k-2"])
}

map的value是切片

   一个切片也可以作为mapvalue

package main

import (
	"fmt"
)

func main() {
	// 该map的value必须是slice
	var sliceMap = make(map[string][]string,3)
	var sliceValue = make([]string,3)
	sliceValue = append(sliceValue,"slice-1","slice-2","slice-3")
	sliceMap["first"] = sliceValue
	fmt.Println(sliceMap)
	// map[first:[slice-1 slice-2 slice-3]]
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读