0
点赞
收藏
分享

微信扫一扫

Mock.js的基本使用

young_d807 03-31 19:00 阅读 2

Go语言基础

介绍

基础

介绍

  • 本文介绍Go语言中map(映射)(map声明、map初始化、map基础操作)等相关知识。

基础

map(映射)
  • map 是无序的、存储键值对(key/value)形式,类似其它语言中的字典或散列表。
  • 通过 key 来对 value 进行操作(增、删、改、查)。
  • map 的 key 一般为基础数据类型,函数、map、切片及包含这三种的自定义结构体类型不能作为 key,自定义类型也可以作为key,value 可以为任意类型。
  • map的底层实现是hash table,根据 key 查找 value 的时间复杂度是O(1)。
map声明
  • 需要指定 key 和 value 的类型,
  • 声明后 map 会自动初始化为 nil,表示此映射不存在
  • cap()函数不能用于 map
package main

import (
	"fmt"
	"reflect"
)

func main() {
	// map 声明,未初始化时,默认为 nil,映射不存在
	var mp1 map[int]int
	fmt.Println("mp1: ", mp1, ", mp1 == nil: ", mp1 == nil, ", type: ", reflect.TypeOf(mp1))
}
map声明、map初始化
  • map初始化方式具体如下
package main

import "fmt"

func main() {
	// 使用字面量初始化
	mp1 := map[int]int{1: 10, 2: 20, 3: 30}
	fmt.Printf("mp1 type: %T, value: %v, len: %v\n", mp1, mp1, len(mp1))

	mp2 := map[[2]int]int{}
	fmt.Printf("mp2 type: %T, value: %v, len: %v\n", mp2, mp2, len(mp2))

	// 不允许使用切片等引用数据类型作为 key
	// mp3 := map[[]int]int{}

	// 使用 make 创建 map
	mp4 := make(map[int]int)
	fmt.Printf("mp4 type: %T, value: %v, len: %v\n", mp4, mp4, len(mp4))

	// 使用 make 创建 map,指定其长度
	mp5 := make(map[int]int, 3)
	fmt.Printf("mp5 type: %T, value: %v, len: %v\n", mp5, mp5, len(mp5))
}
map基础操作
  • 获取 map 中元素的数量
package main

import "fmt"

func main() {
	// 获取元素数量,使用 len 函数
	mp := map[int]int{1: 10, 2: 20, 3: 30}
	fmt.Println("mp : ", mp)
	fmt.Println("mp len: ", len(mp))
}
  • 通过 key 访问 map 元素,当 key 不存在时,返回 value 类型的默认初始值
package main

import "fmt"

func main() {
	// 访问 map 元素
	mp := map[int]int{1: 10, 2: 20, 3: 30}
	fmt.Println("mp[1] : ", mp[1])
	fmt.Println("mp[2] : ", mp[2])
	fmt.Println("mp[3] : ", mp[3])
	// key 4 不存在
	fmt.Println("mp[4] : ", mp[4])
}
  • 修改、增加 map 中的元素,两者操作方式相同
package main

import "fmt"

func main() {
	mp := map[int]int{1: 10, 2: 20, 3: 30}
	fmt.Println("mp : ", mp)
	// 修改 map 中元素
	mp[1] = 100
	mp[3] = 300
	fmt.Println("mp : ", mp)

	// 增加 map 中的元素
	mp[5] = 100
	mp[7] = 300
	mp[9] = 900
	fmt.Println("mp : ", mp)
}
  • 删除 map 中的元素,通过 key ,使用 delete 函数
package main

import "fmt"

func main() {
	mp := map[int]int{1: 10, 2: 20, 3: 30}
	fmt.Println("mp : ", mp)
	// 删除 map 中元素
	delete(mp, 1)
	fmt.Println("mp : ", mp)

	// 清空 map
	clear(mp)
	fmt.Println("mp clear: ", mp)

	// 指向 nil,由垃圾机制自动回收
	mp2 := map[int]int{1: 10, 2: 20, 3: 30}
	mp2 = nil
	fmt.Println("mp nil: ", mp2)

	mp3 := map[int]int{1: 10, 2: 20, 3: 30}
	mp4 := mp3
	fmt.Println("mp3: ", mp3)
	fmt.Println("mp4: ", mp4)
	delete(mp3, 1)
	fmt.Println("mp3: ", mp3)
	fmt.Println("mp4: ", mp4)
}
  • map 查询
package main

import "fmt"

func main() {
	mp2 := map[int]string{1: "10", 2: "20", 3: "30"}

	// map 查询,key 不存在
	a, b := mp2[4]
	fmt.Printf("a: %v, b: %v\n", a, b)

	// 	map 查询,key 存在
	c, d := mp2[3]
	fmt.Printf("c: %v, d: %v\n", c, d)
}
  • map 元素遍历
package main

import "fmt"

func main() {
	mp := map[int]int{1: 10, 2: 20, 3: 30}
    // 使用 for-range 遍历 map
	for i, v := range mp {
		fmt.Printf("mp[%v] = %v\t", i, v)
	}
}
  • 使用 map 赋值给一个 map 变量,底层元素共享
package main

import "fmt"

func main() {
	// 使用 map 赋值给一个 map 变量
	mp3 := map[int]int{1: 10, 2: 20, 3: 30}
	mp4 := mp3
	fmt.Println("mp3: ", mp3)
	fmt.Println("mp4: ", mp4)
	delete(mp3, 1)
	fmt.Println("mp3: ", mp3)
	fmt.Println("mp4: ", mp4)

	mp4[10] = 100
	fmt.Println("mp3: ", mp3)
	fmt.Println("mp4: ", mp4)

	fmt.Println("mp3: ", mp3)
	fmt.Println("mp4: ", mp4)

	clear(mp4)
	fmt.Println("mp3: ", mp3)
	fmt.Println("mp4: ", mp4)
}

起始

举报

相关推荐

0 条评论