Golang Map

MAP是一种无序的键值对的集合。

创建和初始化

  1. 使用make 声明映射
//创建一个映射,键的类型是string值的类型是 int
dict:=make(map[string]int)

//创建一个映射,并初始化
fruits:=map[string]string{
		"durian":"榴莲","haw":"山楂","date":"枣",
	}
	fmt.Println(fruits)

map[date:枣 durian:榴莲 haw:山楂]

  1. 使用映射字面量声明空映射
    创建map时,更常用的方法是使用映射字面量。映射的初始长度会根据初始化时键值对的数量来确定。
    映射的键可以是任意值。这个值的类型可以是内置类型也可以是结构类型,只要这个值可以使用===运算符做比较。切片函数及包含结构类型的这些类型由于具有引用的语义,不能作为键。
//使用字符串切片作为值
	value := []string{"I", "Love", "Golang"}
	dict:=map[string] []string{}
	dict["say"]=value
	fmt.Println(dict)

map[say:[I Love Golang]]

获取键值对的个数 内置函数 len

n:=len(dict)

从map获取值,并通过该值判断键是否存在

  • 法一
fruits:=map[string]string{
		"durian":"榴莲","haw":"山楂","date":"枣","peach":"桃子",
	}

	banana:=fruits["banana"]
	if banana!=""{
		fmt.Println(banana)
	}else {
		fmt.Println("banana not exists")
	}

	peach:=fruits["peach"]
	if peach!=""{
		fmt.Println(peach)
	}else {
		fmt.Println("peach not exists")
	}

banana not exists
桃子

  • 法二
apples:=map[string]string{
		"durian":"榴莲","haw":"山楂","date":"枣","peach":"桃子",
	}

_,ok:=apples["apple"]
fmt.Println(ok)

false

用range迭代映射

MAP 所有键值用关键字range索引

fruits:=map[string]string{
		"durian":"榴莲","haw":"山楂","date":"枣","peach":"桃子",
	}
fmt.Println(fruits)
for key,value:=range fruits{
	fmt.Printf("Key: %s,Value: %s\n",key,value)

}

Key: durian,Value: 榴莲
Key: haw,Value: 山楂
Key: date,Value: 枣
Key: peach,Value: 桃子

map中删除一个键值对 delete

使用内置的delete 函数

fruits:=map[string]string{
		"durian":"榴莲","haw":"山楂","date":"枣","peach":"桃子",
	}
	//fmt.Println(apples)
	for key,value:=range fruits{
		fmt.Printf("Key: %s,Value: %s\n",key,value)

	}
	fmt.Println("***********")
	delete (fruits,"peach")
	for key,value:=range fruits{
		fmt.Printf("Key: %s,Value: %s\n",key,value)

	}

Key: peach,Value: 桃子
Key: durian,Value: 榴莲
Key: haw,Value: 山楂
Key: date,Value:***********
Key: date,Value: 枣
Key: durian,Value: 榴莲
Key: haw,Value: 山楂

注意
可以通过声明创建一个未初始化的map(nil MAP)

map 修改元素的值

  • 直接修改
fruits["date"]="红枣"
  • 间接修改
    map是一种引用类型,如果两个map同时指向一个底层,如果一个改变,另一个也改变
fruits:=map[string]string{
		"durian":"榴莲","haw":"山楂","date":"枣","peach":"桃子",
	}

fruits_copy:=fruits
fruits_copy["date"]="红枣"
for key,value:=range fruits{
	fmt.Printf("Key: %s,Value: %s\n",key,value)

}

Iteration order

获取所有键,
按照 key 排序:

import "sort"

var m map[int]string
var keys []int
for k := range m {
    keys = append(keys, k)
}
sort.Ints(keys)
for _, k := range keys {
    fmt.Println("Key:", k, "Value:", m[k])
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值