Java转Go—11Map

Map

map是一种键值对形式的数据结构,一个键对应一个值,可以通过键快速检索出其对应的value值,在map中key的值是唯一的,value的值不唯一,并且map中保存的数据是无序的。

Map声明

声明Map可以使用map关键字进行声明,同时也可以通过make函数进行声明,仅仅通过map关键字声明的map为nil map,没有初始化的情况无法使用,如果直接往map里面赋值会发生panic,使用make函数声明后map才会在分配内存空间,且可以正常使用。

语法:

// 声明变量,默认 map 是 nil
var map名 map[键类型]值类型

// 使用 make 函数
map名 := make(map[键类型]值类型)

基本使用代码示例:

package main

import "fmt"

func main() {
 // 当前声明的m为nil map,无法直接使用
 var m map[string]int
 // 使用make初始化之后可正常使用
 m = make(map[string]int)
 // 朝m里面放一个键为one,值为1的键值对数据
 m["one"] = 1
 m["two"] = 2
 // 取出键为one对应的值
 fmt.Println(m["one"])
 fmt.Println(m["two"])
}

运行结果:

Java转Go—11Map
运行结果

**map中的键是唯一的,**如果在map中已经存放了一个key对应的value,再次存放一样的key进去就会覆盖之前的value。

在使用map关键字声明一个map时,由于是nil map,所以直接使用会报panic,但是可以在声明时直接初始化赋值,这样使用时就不会导致panic,明初始化方式如下:

m := map[string]int{"one" : 1"two" : 2"three" : 3}

循环遍历

map可以使用for range循环进行遍历,遍历是会得到map中的key集合,然后使用key即可获取到map的value。

代码示例:

package main

import "fmt"

func main() {
 m := map[string]int{"one" : 1"two" : 2}
 for key := range m {
  fmt.Printf("键%s对应的值为%d n", key, m[key])
 }
}

运行结果:

Java转Go—11Map
运行结果

查看元素是否存在

使用map名加中括号的方式获取一个key对应的value,如果当key不存在时,获取到的就是map声明时对应类型的默认值,例如var m map[string]int,如果这时候获取一个不存在的key,返回的就是0,那么我们要如何才能知道返回的0是代表不存在这个key还是这个key对应的value本来就是0呢?

其实对于这个问题的解决方法很简单,在map通过中括号取值时,不只是返回一个值,还会返回一个bool类型,这个类型就代表了当前需要查找的key是否存在。

代码示例:

package main

import "fmt"

func main() {
 m := map[string]int{"zero" : 0"one" : 1"two" : 2}
 value, ok := m["zero"]
 if ok {
  fmt.Println("zero存在,value:", value)
 } else {
  fmt.Println("zero不存在,value:", value)
 }
 value, ok = m["three"]
 if ok {
  fmt.Println("three存在,value:", value)
 } else {
  fmt.Println("three不存在,value:", value)
 }
}

在上述代码中,m中有key为zero对应的值为0,所以直接通过m["zero"]取值,获取到的ok为true,且value=0,但是在使用m["three"]取值时,由于m中没有three这个key,所以获取到的ok为false,value同样也是0。

运行结果:

Java转Go—11Map
运行结果

删除元素

在使用map时还可以通过delete函数删除map中的元素,使用delete函数时需要指定两个参数,第一个参数为需要操作的map,第二个参数为需要删除的key。

代码示例:

package main

import "fmt"

func main() {
 m := map[string]int{"zero" : 0"one" : 1"two" : 2}
    // 删除m中key为two的元素
 delete(m, "two")
 value, ok := m["two"]
 if ok {
  fmt.Println(value)
 } else {
  fmt.Println("two不存在")
 }
}

由于删除了two这个key,所以再次通过这个key取值的时候就会提示two不存在

运行结果:

Java转Go—11Map
运行结果


原文始发于微信公众号(良猿):Java转Go—11Map

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/215830.html

(0)
小半的头像小半

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!