一.map类型
1. map判断是否存在键值
m1 := map[string]int{"a": 1, "b": 2, "c": 3}
if a, has := m1["landy"]; has {
fmt.Println("map存在key=landy的字段,值为:", a, "-----存在的状态:", has)
} else {
fmt.Println("map不存在key=landy的字段,值为:", a, "-----存在的状态:", has)
}
得到结果:
map不存在key=landy的字段,值为: 0 -----存在的状态: false
m1 := map[string]int{"a": 1, "b": 2, "c": 3}
if a, has := m1["c"]; has {
fmt.Println("map存在key=c的字段,值为:", a, "-----存在的状态:", has)
} else {
fmt.Println("map不存在key=c的字段,值为:", a, "-----存在的状态:", has)
}
得到结果:
map存在key=c的字段,值为: 3 -----存在的状态: true
备注:
//只判断存在
if a, has := m1["c"]; has{//操作}
//只判断不在
if a, has := m1["c"]; !has{//操作}
2. map类型对比值是否一致
// map类型没有定义运算符==,不能使用==;map只能==nil
// 如需m1和m2对比,对比m1与m2的长度,循环m1,看key值是否存在m2,存在则对应双方值,不存在则false返回;
func comparisonMap(map1, map2 map[string]int) bool {
if len(map1) != len(map2) {
return false
}
for k1, v1 := range map1 {
if v2, has := map2[k1]; has {
fmt.Println("map2中存在key="+k1+"的,has值:", has, ";map1中key="+k1+"的值:", v1, ";map2中key="+k1+"的值:", v2)
if v1 != v2 {
return false
}
} else {
fmt.Println("map2中存在key="+k1+"的,has值:", has, ";map1中key="+k1+"的值:", v1, ";map2中key="+k1+"的值:", v2)
return false
}
}
return true
}
func main() {
m1 := map[string]int{"a": 1, "b": 2, "c": 3}
m2 := map[string]int{"a": 1, "c": 2}
m3 := map[string]int{"b": 2, "a": 1, "c": 3}
fmt.Println("m1与m2对比----------开始")
m1m2ComparisonStatus := comparisonMap(m1, m2)
fmt.Println("m1与m2对比状态:", m1m2ComparisonStatus)
fmt.Println("m1与m2对比----------结束")
fmt.Println("m1与m3对比----------开始")
m1m3ComparisonStatus := comparisonMap(m1, m3)
fmt.Println("m1与m3对比状态:", m1m3ComparisonStatus)
fmt.Println("m1与m3对比----------结束")
//go 反射包中 reflect.DeepEqual可以直接对比得到结果,
fmt.Println("m1与m2:reflect.DeepEqual状态:", reflect.DeepEqual(m1, m2))
fmt.Println("m1与m3:reflect.DeepEqual状态:", reflect.DeepEqual(m1, m3))
}
//m1与m2对比----------开始
//m1与m2对比状态: false
//m1与m2对比----------结束
//m1与m3对比----------开始
//map2中存在key=a的,has值: true ;map1中key=a的值: 1 ;map2中key=a的值: 1
//map2中存在key=b的,has值: true ;map1中key=b的值: 2 ;map2中key=b的值: 2
//map2中存在key=c的,has值: true ;map1中key=c的值: 3 ;map2中key=c的值: 3
//m1与m3对比状态: true
//m1与m3对比----------结束
//m1与m2:reflect.DeepEqual状态: false
//m1与m3:reflect.DeepEqual状态: true