ch10、Map声明、元素访问及遍历

1、Map声明

声明方式:

map[keyType]valueType{}
package my_map

import "testing"

func TestInitMap(t *testing.T) {
	// 方法一,初始化指定类型和值
	m1 := map[int]int{1: 1, 2: 2, 3: 3} // map[key type]value type{}
	t.Log(m1[2])
	t.Logf("len m1=%d", len(m1))

	// 方法二,初始化为指定key类型和空值
	m2 := map[string]int{}
	m2["test01"] = 14
	t.Logf("len m2=%d", len(m2))

	// 方法三,使用make关键字初始化(其中,map的cap不可用,需使用len来获取大小)
	m3 := make(map[int]int, 10/* Initial Capacity */)
	t.Logf("len m3=%d", len(m3))
}

访问map中不存在的key时,go语言会返回零值,不能通过返回nil来判断元素是否存在,由此产生一个问题:

如何区分是key不存在还是本身key对应的值就是0?

通过ok-idiom模式判断指定键值对是否存储

package my_map

import "testing"


func TestAccessNotExistingKey(t *testing.T) {
	m1 := map[int]int{}
	t.Log(m1[2]) // output:0,default
	m1[2] = 0
	t.Log(m1[2]) // output:0

	// 通过返回的状态位来判断,如果存在,则是true,不存在则是false
	if v, ok := m1[3]; ok {
		t.Logf("Key 3's value is %d", v)
	} else {
		t.Log("Key 3's not existing.")	// output
	}
}

2、Map遍历

遍历所有的key、value值,通过for + range实现

package my_map

import "testing"

func TestTravelMap(t *testing.T) {
	m1 := map[int]int{1: 1, 2: 2, 3: 3}
	for k, v := range m1 {
		t.Log(k, v)
	}
}

3、Map删除

通过Go语言内置delete函数删除指定元素

package main

import "fmt"

func main() {
	var dict = map[string]string{"name": "lnj", "age": "33", "gender": "male"}
	fmt.Println("删除前:", dict) // map[name:lnj age:33 gender:male]
	// 第一个参数: 被操作的字典
	// 第二个参数: 需要删除元素对应的key
	delete(dict, "name")
	fmt.Println("删除后:", dict) // map[age:33 gender:male]
}
发表评论
留言与评论(共有 0 条评论) “”
   
验证码:

相关文章

推荐文章