【原创】go语言学习(十)Map类型
目录
- 声明和初始化
- 基本操作
- map排序
- map类型的切⽚片
- 课后作业
声明和初始化
1、map类型是⼀一个key-value的数据结构。
//var a map[key的类型]value类型
var a map[string]int
var b map[int]string
var c map[float32]string
注意:map必须初始化才能使⽤用,否则panic
2、map类型的变量量默认初始化为nil,需要使⽤用make分配map内存
package main
import (
"fmt"
)
func main() {
var a map[string]int
if a == nil {
fmt.Println("map is nil. Going to make one.")
A = make(map[string]int)
}
}
基本操作
1、map插入操作
package main
import (
"fmt"
)
func main() {
a := make(map[string]int)
a["steve"] = 12000
a["jamie"] = 15000
a["mike"] = 9000
fmt.Println(“a map contents:", a)
}
2、声明时进⾏行行初始化
package main
import (
"fmt"
)
func main() {
var a map[string]int
if a == nil {
fmt.Println("map is nil. Going to make one.")
A = make(map[string]int)
}
}
3、map插入操作
package main
import (
"fmt"
)
func main() {
a := make(map[string]int)
a["steve"] = 12000
a["jamie"] = 15000
a["mike"] = 9000
fmt.Println(“a map contents:", a)
}
4、声明时进⾏行行初始化
package main
import (
"fmt"
)
func main() {
a := map[string]int {
"steve": 12000,
"jamie": 15000,
}
a[“mike"] = 9000
fmt.Println(“a map contents:", a)
}
5、 通过key访问map中的元素
package main
import (
"fmt"
)
func main() {
a := map[string]int{
"steve": 12000,
"jamie": 15000,
}
a["mike"] = 9000
b := "jamie"
fmt.Println("Salary of", b, "is", a[b])
}
6、 通过key访问map中的元素
package main
import (
"fmt"
)
func main() {
a := map[string]int{
"steve": 12000,
"jamie": 15000,
}
a["mike"] = 9000
b := “123”
fmt.Println("Salary of", b, "is", a[b])
}
7、如何判断map指定的key是否存在? value, ok := map[key]
package main
import (
"fmt"
)
func main() {
a := map[string]int{
"steve": 12000,
"jamie": 15000,
}
a["mike"] = 9000
b := "joe"
value, ok := a[b]
if ok == true {
fmt.Println("Salary of", b, "is", value)
} else {
fmt.Println(b,”not found")
}
}
8、map遍历操作
package main
import (
"fmt"
)
func main() {
a := map[string]int{
"steve": 12000,
"jamie": 15000,
}
a["mike"] = 9000
fmt.Println("All items of a map")
for key, value := range a {
fmt.Printf("personSalary[%s] = %d\n", key, value)
}
}
9、map删除元素
package main
import (
"fmt"
)
func main() {
a := map[string]int{
"steve": 12000,
"jamie": 15000,
}
a["mike"] = 9000
fmt.Println("map before deletion", a)
delete(a, "steve")
fmt.Println("map after deletion", a)
}
10、map的长度
package main
import (
"fmt"
)
func main() {
a := map[string]int{
"steve": 12000,
"jamie": 15000,
}
a["mike"] = 9000
fmt.Println("length is", len(a))
}
11、map是引用类型
package main
import (
"fmt"
)
func main() {
a := map[string]int{
"steve": 12000,
"jamie": 15000,
}
a["mike"] = 9000
fmt.Println(“origin map", a)
b := a
b["mike"] = 18000
fmt.Println(“a map changed", a)
}
12、map按照key进行行排序,遍历
package main
import (
"fmt"
"sort"
)
func main() {
var a map[string]int = make(map[string]int, 10)
for i := 0; i < 10; i++ {
key := fmt.Sprintf("key%d", i)
a[key] = i
}
var keys []string
for key, _ := range a {
keys = append(keys, key)
}
sort.Strings(keys)
for _, key := range keys {
fmt.Printf("key:%s=%d\n", key, a[key])
}
}
map排序
package main import (
"fmt"
"math/rand"
"sort"
"time"
) func main() {
rand.Seed(time.Now().UnixNano())
var a map[string]int = make(map[string]int, 1024) for i := 0; i < 128; i++ {
key := fmt.Sprintf("stu%d", i)
value := rand.Intn(1000)
a[key] = value
} var keys []string = make([]string, 0, 128)
for key, value := range a {
fmt.Printf("map[%s]=%d\n", key, value)
keys = append(keys, key)
} sort.Strings(keys)
for _, value := range keys {
fmt.Printf("key:%s val:%d\n", value, a[value])
}
}
map类型的切片
package main import (
"fmt"
"math/rand"
"time"
) func sliceMap(){
rand.Seed(time.Now().UnixNano())
var s[]map[string] int
s = make([]map[string]int, 5, 16)
for index,val := range s {
fmt.Printf("slice[%d]=%v\n", index, val)
} fmt.Println()
s[0] = make(map[string]int, 16)
s[0]["stu01"] = 1000
s[0]["stu02"] = 1000
s[0]["stu03"] = 1000 for index, val := range s {
fmt.Printf("slice[%d]=%v\n", index, val)
}
} func mapSlice() {
rand.Seed(time.Now().UnixNano())
var s map[string][]int
s = make(map[string[]int, 16)
key := "stu01"
value, ok := s[key]
if !ok {
s[key] = make([]int, 0, 16) value = s[key]
} value = append(value, 100)
value = append(value, 200)
value = append(value, 300) s[key] = value
fmt.Printf("map:%v\n", s)
} func main(){
//sliceMap()
}
【原创】go语言学习(十)Map类型的更多相关文章
- C语言学习之枚举类型
前言 枚举(enum)类型是计算机编程语言中的一种数据类型.枚举类型:在实际问题中,有些变量的取值被限定在一个有限的范围内.例如,一个星期内只有七天,一年只有十二个月,一个班每周有六门课程等等.如果把 ...
- 【C语言学习】存储类型
C语言中的存储类型主要有四种:auto.static.extern.register ★auto存储类型 默认的存储类型.在C语言中,假设忽略了变量的存储类型,那么编译器就会自己主动默认为auto型 ...
- c语言学习笔记 - 枚举类型
今天学习了c语言的枚举类型的使用,可能是PHP里没使用过,开始看的时候还是觉得有点怪,后来做了下例子才理解,这里做个笔记记录一下. #include <stdio.h> enum anim ...
- Dart语言学习(十二) Dart面向对象
Dart作为一种高级语言,支持面向对象的很多特性,并且支持基于mixin的继承方式. 基于mixin的继承方式是指:一个类可以继承自多个父类,相当于其他语言里的多继承. 所有的类都有同一个基类Obje ...
- Dart语言学习(十四) Dart泛型
什么是泛型? 通俗理解:泛型就是解决 类 接口 方法的复用性.以及对不特定数据类型的支持(类型校验) 如下代码,只能返回string类型的数据 String getData(String value) ...
- Dart语言学习(十) Dart流程控制语句
一.条件语句:if.if...elseif.if...elseif...else int score = 95; if (score >=90) { print('优秀'); } else if ...
- C语言学习之联合类型
前言 联合(union)是一种特殊的数据类型,和结构体很像,结构体各成员变量有自己独立的存储位置,而联合的成员变量共享同一片存储区域,因此联合变量再一个时刻只能保存它的某一个成员的值. 联合的定义和初 ...
- GO语言学习笔记2-int类型的取值范围
相比于C/C++语言的int类型,GO语言提供了多种int类型可供选择,有int8.int16.int32.int64.int.uint8.uint16.uint32.uint64.uint. 1.i ...
- Dart语言学习(十五) Dart函数方法
Dart函数方法可分为两类: 一.内置方法/函数: print(); 二.自定义方法: 自定义方法的基本格式: 返回类型 方法名称(参数1,参数2,...){ 方法体 return 返回值; } vo ...
- go语言学习--处理map的无序输出
最近工作中遇到了这样的一个场景,需要处理一个无限极分类的问题,对于数据结构的定义首先想到了,map,map[int]map[int]struct.通过两层map的定义归类parent_id和id的关系 ...
随机推荐
- Python TypeError: __init__() got multiple values for argument 'master'(转)
转自:https://stackoverflow.com/questions/33153404/python-typeerror-init-got-multiple-values-for-argume ...
- jquery easyui form表单一开始就自动启用验证了,修改为form提交的时候在开启验证
<form method="post" action="<%=path %>" class="easyui-form" d ...
- iOS自动布局学习(UIView+AutoLayout)
自动布局虽然在iOS6的时候已经推出,不过由于各个原因并没有被开发组广泛使用.一方面是大家的app支持版本都是低于iOS6的,另一方面来说是Xcode支持木有现在这么好.以前由于iPhone设备相对固 ...
- 使用SAP Cloud Platform Leonardo机器学习提取图片的特征向量
选中一个需要进行测试的Leonardo机器学习服务,点击Configure Environments: 因为我不想使用sandbox环境,所以我选择了eu10这个region: 维护clientid和 ...
- Idea设置和查看
1.查看激活码有效期 Help->Register
- CentOS7安装CDH 第十一章:离线升级CDH版本
相关文章链接 CentOS7安装CDH 第一章:CentOS7系统安装 CentOS7安装CDH 第二章:CentOS7各个软件安装和启动 CentOS7安装CDH 第三章:CDH中的问题和解决方法 ...
- Flutter——FloatingActionButton组件(浮动按钮组件)
FloatingActionButton 简称 FAB ,可以实现浮动按钮,也可以实现类似闲鱼 app 的地步凸起导航. 属性名称 属性值 child 子视图,一般为 Icon,不推荐使用文字 ...
- xlsxwriter写入Excel文件
#coding=utf-8 import xlsxwriter #加载包 myWorkbook = xlsxwriter.Workbook(opath+'/'+file_name+'.xlsx') # ...
- 20.Vue中获取DOM元素和组件
1.获取DOM元素和组件:this.$refs
- Java并发包--ConcurrentHashMap原理解析
ConcurrentHashMap实现原理及源码分析 ConcurrentHashMap是Java并发包中提供的一个线程安全且高效的HashMap实现(若对HashMap的实现原理还不甚了解,可参 ...