标签:结构 size 复合 存储 cti let port nil 报错
package main
import "fmt"
func main() {
/*
map:映射,是一种专门用于存储键值对的集合。属于引用类型
存储特点:
A:存储的是无序的键值对
B:键不能重复,并且和value值一一对应的。
map中的key不能重复,如果重复,那么新的value会覆盖原来的,程序不会报错。
语法结构:
1.创建map
var map1 map[key类型]value类型 //nil map,无法直接使用
var map2 = make(map[key类型])value类型
map3 := make(map[key类型])value类型
//不写make直接赋值,底层有make
var map3 = map[key类型]value类型{key:value,key:value,key:value...}
map5 := map[key类型]value类型{key:value,key:value,key:value...}
2.添加/修改
map[key]=value
如果key不存在,就是添加数据
如果key存在,就是修改数据
3.获取
map[key]-->value
value,ok := map[key]
根据key获取对应的value
如果key存在,value就是对应的数据,ok为true
如果key不存在,value就是值类型的默认值,ok为false
4.删除数据:
delete(map,key)
如果key存在,就可以直接删除
如果key不存在,删除失败,不会报错
5.长度:
len()
每种数据类型:
int:0
float:0.0-->0
string:""
array:[00000]
slice:nil
map:nil
*/
//1.创建map
var map1 map[int]string //没有初始化,nil
var map2 = make(map[int]string) //创建
var map3 = map[string]int{"Go": 98, "Python": 87, "Java": 79, "Html": 93}
fmt.Println(map1) //map[]
fmt.Println(map2) //map[]
fmt.Println(map3) //map[Go:98 Html:93 Java:79 Python:87]
fmt.Println(map1 == nil) //true
fmt.Println(map2 == nil) //false
fmt.Println(map3 == nil) //false
//2.nil map
if map1 == nil {
map1 = make(map[int]string)
fmt.Println(map1 == nil) //false
}
//3.存储键值对到map中
//map1[key] = value
map1[1] = "hello" //panic: assignment to entry in nil map
map1[2] = "world"
map1[3] = "memeda"
map1[4] = "王二狗"
map1[5] = "ruby"
map1[6] = "三胖思密达"
map1[7] = ""
//4.获取数据,根据key获取对应的value值
//根据key获取对应的value,如果key存在,获取数值,如果key不存在,获取的是value值类型的零值
fmt.Println(map1) //map[1:hello 2:world 3:memeda 4:王二狗 5:ruby 6:三胖思密达 7:]
fmt.Println(map1[4]) //王二狗
fmt.Println(map1[40]) //""
v1,ok :=map1[40]
if ok {
fmt.Println("对应的数值是:",v1)
}else{
fmt.Println("操作的key不存在,获取到的是零值:",v1)
}
//5.修改数据
fmt.Println(map1)
map1[3] = "如花"
fmt.Println(map1)
//6.删除数据
delete(map1,3)
fmt.Println(map1)
delete(map1,100)
fmt.Println(map1)
//7.长度
fmt.Println(len(map1))
}
package main
import (
"fmt"
"sort"
)
func main() {
/*
map的遍历:
使用:for range
数组,切片:index,value
map:key,value
*/
map1 := make(map[int]string)
map1[1] = "红孩儿"
map1[2] = "小钻风"
map1[3] = "白骨精"
map1[4] = "白素贞"
map1[5] = "金角大王"
map1[6] = "王二狗"
//1.for range遍历map
for k, v := range map1 {
fmt.Println(k, v)
}
//2.for遍历map
for i := 1; i <= len(map1); i++ {
fmt.Println(i, "--->", map1[i])
}
/*
1.获取所有的key,-->切片/数组
2.进行排序
3.遍历key,--->map[key]
*/
keys := make([]int, 0, len(map1))
fmt.Println(keys)
for k, _ := range map1 {
keys = append(keys, k)
}
fmt.Println(keys)
//冒泡排序,或者使用sort包下的排序方法
sort.Ints(keys)
fmt.Println(keys)
for _, key := range keys {
fmt.Println(key, map1[key])
}
s1 := []string{"Apple", "Windows", "Orange", "abc", "王二狗", "acd", "acc"}
fmt.Println(s1) //[Apple Windows Orange abc 王二狗 acd acc]
sort.Strings(s1)
fmt.Println(s1) //[Apple Orange Windows abc acc acd 王二狗]
}
package main
import "fmt"
func main() {
/*
map和slice的结合使用:
1.创建map用于存储人的信息
name,age,sex,address
2.每个map存储一个人的信息
3.将这些map存入到slice中
4.打印遍历输出
*/
//1.创建map存储第一个人的信息
map1 := make(map[string]string)
map1["name"] = "王二狗"
map1["age"] = "30"
map1["sex"] = "男性"
map1["address"] = "北京市XX路XX号"
fmt.Println(map1) //map[address:北京市XX路XX号 age:30 name:王二狗 sex:男性]
//2.第二个人
map2 := make(map[string]string)
map2["name"] = "李小花"
map2["age"] = "20"
map2["sex"] = "女性"
map2["address"] = "上海市。。。"
fmt.Println(map2) //map[address:上海市。。。 age:20 name:李小花 sex:女性]
map3 := map[string]string{"name": "ruby", "age": "30", "sex": "女性", "address": "杭州市"}
fmt.Println(map3) //map[address:杭州市 age:30 name:ruby sex:女性]
//将map存入到slice中
s1 := make([]map[string]string, 0, 3)
s1 = append(s1, map1)
s1 = append(s1, map2)
s1 = append(s1, map3)
//遍历切片
for i, val := range s1 {
//val :map1,map2,map3
fmt.Printf("第 %d 个人的信息是:\n", i+1)
fmt.Printf("\t姓名:%s\n", val["name"])
fmt.Printf("\t年龄:%s\n", val["age"])
fmt.Printf("\t性别:%s\n", val["sex"])
fmt.Printf("\t地址:%s\n", val["address"])
}
}
/*
第 1 个人的信息是:
姓名:王二狗
年龄:30
性别:男性
地址:北京市XX路XX号
第 2 个人的信息是:
姓名:李小花
年龄:20
性别:女性
地址:上海市。。。
第 3 个人的信息是:
姓名:ruby
年龄:30
性别:女性
地址:杭州市
*/
package main
import "fmt"
func main() {
/*
一:数据类型:
基本数据类型:int,float,string,bool
复合数据类型:array,slice,map,function,pointer,struct。。。
array:[size]数据类型
slice:[]数据类型
map:map[key的类型]value的类型
二:存储特点:
值类型:int,float,string,bool,array,struct
引用类型:slice,map
make(),slice,map,chan
*/
map1 := make(map[int]string)
map2 := make(map[string]float64)
fmt.Printf("%T\n", map1) //map[int]string
fmt.Printf("%T\n", map2) //map[string]float64
map3 := make(map[string]map[string]string) //map[string]map[string]string
m1 := make(map[string]string)
m1["name"] = "王二狗"
m1["age"] = "30"
m1["salary"] = "3000"
map3["hr"] = m1
m2 := make(map[string]string)
m2["name"] = "ruby"
m2["age"] = "28"
m2["salary"] = "8000"
//把一个map赋值给一个map中的键
map3["总经理"] = m2
fmt.Println("map3", map3)
//map3 map[hr:map[age:30 name:王二狗 salary:3000] 总经理:map[age:28 name:ruby salary:8000]]
map4 := make(map[string]string)
map4["王二狗"] = "矮矬穷"
map4["李小花"] = "白富美"
map4["ruby"] = "住在隔壁"
fmt.Println(map4) //map[ruby:住在隔壁 李小花:白富美 王二狗:矮矬穷]
map5 := map4
fmt.Println(map5) //map[ruby:住在隔壁 李小花:白富美 王二狗:矮矬穷]
map5["王二狗"] = "高富帅"
fmt.Println(map4) //map[ruby:住在隔壁 李小花:白富美 王二狗:高富帅]
fmt.Println(map5) //map[ruby:住在隔壁 李小花:白富美 王二狗:高富帅]
}
标签:结构 size 复合 存储 cti let port nil 报错
原文地址:https://www.cnblogs.com/yzg-14/p/12247485.html