【go语言 基础系列】map基本操作

map 是散列表的引用, 数据组+链表的智慧结合

【创建】

  1. 使用内建函数 :mymap:=make(map(string)int)
  2. 通过字面量赋值
mymap:=map[string]int{
	"a":1,
	"b":2,
	}

空map 为 map[string]int{}

【删除】

使用内建函数delete

delete(mymap,"a")

delete原型如下

// 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.
func delete(m map[Type]Type1, key Type)

【遍历】

for k,v:=range mymap{
	fmt.Println(k,v)
}	

【零值】

元素不存在  or  元素存在 但是值 为 零

【判断元素是否在map中】

if t ,ok:=mymap["mykey"]; !ok{
	do something
}

【map间的比较】

func equal(x, y map[string]int) bool {
	if len(x) != len(y) {
		return false
	}
	for k, xv := range x {
		if yv, ok := y[k]; !ok || yv != xv {
			return false
		}
	}
	return true

【构建set】

利用map中的key的唯一性 构建set

set:=make(map[string]bool)
y:=string(something)
if !set[y] {
         set[y] = true
           }

【构建slice类型的键值map】

首先通过一个函数 实现 slice到字符串的映射,然后赋值给map的键值

package main

import (
	"fmt"
	//"strings"
)

//实现slice 到string的转换
func k(list []string) string {
	return fmt.Sprintf("%q", list)
}

func main() {
	//准备数据
	x := [3][]string{
		[]string{"a", "b", "c"},
		[]string{"aa", "bb", "cc"},
		[]string{"aaa", "bbb"},
	}
	fmt.Println(x)
	fmt.Printf("%T", x)

	m := make(map[string]int)

	for _, b := range x {
		fmt.Printf("b is: %v ,type is %T\n", b, b)
		newkey := k(b)
		fmt.Printf("newkey is: %v ,type is %T\n", newkey, newkey)
		m[newkey] = 1

	}
	fmt.Println("m is:")
	fmt.Println(m)

}

执行结果:

[[a b c] [aa bb cc] [aaa bbb]]
[3][]stringb is: [a b c] ,type is []string
newkey is: ["a" "b" "c"] ,type is string
b is: [aa bb cc] ,type is []string
newkey is: ["aa" "bb" "cc"] ,type is string
b is: [aaa bbb] ,type is []string
newkey is: ["aaa" "bbb"] ,type is string
m is:
map[["a" "b" "c"]:1 ["aa" "bb" "cc"]:1 ["aaa" "bbb"]:1]
即实现了  ["aaa" "bbb"]: 为key的场景。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值