Go数据类型 map

Posted sss4

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Go数据类型 map相关的知识,希望对你有一定的参考价值。

前言

 Go语言中提供了映射关系容器为map,其内部使用散列表(hash)实现。类似Python中的字典。

 

map的定义及基本操作

package main

import "fmt"

func main() {
	//定义了1个map变量,key是sring类型、value是int类型
	var m1 map[string]int
	fmt.Println(m1 == nil) //还没有初始化(没有在内存中开辟空间)
	//初始化:估算好map的容量,避免程序运行期间在扩容
	m1 = make(map[string]int, 10)
	m1["年龄"] = 18
	fmt.Println(m1)
	fmt.Println(m1["年龄"])
	//获取不存在的key
	v, ok := m1["姓名"]
	if !ok {
		fmt.Println("没有该key")
	} else {
		fmt.Println(v)
	}
	//直接获取不存在的key,返回对应类型的默认值
	fmt.Println(m1["不存在的key"])

	//遍历map的key和value
	m2 := make(map[string]string, 10)
	m2["姓名"] = "Martin"
	m2["性别"] = "男"
	for k, v := range m2 {
		fmt.Println(k, v)
	}
	//仅遍历map的keys
	for k := range m2 {
		fmt.Println(k)
	}
	//仅遍历map的values
	for _, v := range m2 {
		fmt.Println(v)
	}
	//删除map中的key
	delete(m2,"姓名")
	fmt.Println(m2)
	//删除map中不存在的key() no-option
	delete(m1,"不存在的key")
	/*
	go doc builtin.delete 查看内置函数的用法
	func delete(m map[Type]Type1, key Type)
    The delete built-in function deletes the element with the specified key
    (m[key]) from the map. If m is nil or there is no such element, delete is a
    no-op.
	*/

}

  

排序显示map

无论是Python的字典还是Go中的map,它们都是无序的。那么我们如何对map进行排序呢?就需要1些迂回的方法;

对map的key进行排序做成切片,然后遍历切片中的key逐一获取map中的元素。

 

package main

import (
	"fmt"
	"math/rand" //math包中有个rand模块
	"sort"
	"time"
)

func main() {
	//获取当前时间的 纳秒(随机数字)
	rand.Seed(time.Now().UnixNano())
	//声明1个map存放{stud纳秒:分数 }
	var scoreMap = make(map[string]int, 200)
	for i := 0; i < 100; i++ {
		key := fmt.Sprintf("stud%2d", i)
		value := rand.Intn(100) //生成0-99的随机整数(作为分数)
		scoreMap[key] = value
	}

	var keys = make([]string, 0, 200)
	for key := range scoreMap {
		keys = append(keys, key)
	}
	//安装字符串进行排序
	sort.Strings(keys)
	//通过排序后的key,对map逐一获取值
	for _, key := range keys {
		fmt.Println(scoreMap[key])
	}

}

  

切片和map组合数据类型

如何在go里面组织这种多维度的数据类型?

[{"key1":"v1"},{"key2":"v2"}]

{"ke1":["v1","v2","v3"] }

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

参考

 

以上是关于Go数据类型 map的主要内容,如果未能解决你的问题,请参考以下文章

Go语言 复合数据类型数组map

Go的数据类型

Go - Map 集合

Go - Map 集合

Go: 无效操作 - 类型 *map[key]value 不支持索引

go语言之map