Map 是一种无序的键值对的集合。Map 最重要的一点是通过 key 来快速检索数据,key 类似于索引,指向数据的值。

Map 是一种集合,所以我们可以像迭代数组和切片那样迭代它。不过,Map 是无序的,我们无法决定它的返回顺序,这是因为 Map 是使用 hash 表来实现的。

键必须是支持相等运算符 ("=="、"!=") 类型, 如 number、string、 pointer、array、struct,以及对应的 interface。

值可以是任意类型,没有限制。

定义 Map

第一种,声明一个Map:

var m map[int]string

Map定义并初始化

var m1 map[int]string = map[int]string{: "Linux", : "Python"}
var m2 = map[int]string{: "Java", : "Golang"}

第二种,通过make来创建Map

var m1 map[int]string = make(map[int]string, )
var m2 = make(map[int]string, )

第三种,通过 := 语法来定义Map

m1 := map[int]string{}
m2 := make(map[int]string, )

Map操作

插入操作:

package main

import "fmt"

func main() {
m := map[string]string{"key0": "Linux", "key1": "Python"}
fmt.Printf("插入前:map m : %v\n", m)
m["key2"] = "oldboy"
fmt.Printf("插入后:map m : %v\n", m)
}

更新操作:

package main

import "fmt"

func main() {
m := map[string]string{"key0": "Linux", "key1": "Python"}
fmt.Printf("更新前:map m : %v\n", m)
m["key1"] = "Golang"
fmt.Printf("更新后:map m : %v\n", m)
}

查找操作:

package main

import "fmt"

func main() {
m := map[string]string{"key0": "Linux", "key1": "Python"}
val, ok := m["key0"]
if ok {
fmt.Printf("查找操作:key0 => %v\n", val)
}
}

删除操作:

package main

import "fmt"

func main() {
    m := map[string]string{"key0": "Linux", "key1": "Python"}
    fmt.Printf("删除前:map m : %v\n", m)
    delete(m, "key1")
    fmt.Printf("删除后:map m : %v\n", m)
}

删除操作,如果 key 不存在,不会出错。

package main

import "fmt"

func main() {
m := map[string]string{"key0": "Linux", "key1": "Python"}
fmt.Printf("删除前:map m : %v\n", m)
delete(m, "key10")
fmt.Printf("删除后:map m : %v\n", m)
}

求长度:

package main

import "fmt"

func main() {
m := map[string]string{"key0": "Linux", "key1": "Python"}
len := len(m)
fmt.Printf("map m 长度: %v\n", len)
}

注意:不可以在map上使用cap()方法。

package main

import "fmt"

func main() {
m := map[string]string{"key0": "Linux", "key1": "Python"}
cap := cap(m)
fmt.Printf("map's cap is %v\n", cap)
}

编译错误:

./main.go::: invalid argument m (type map[string]string) for cap

Go语言容器的更多相关文章

  1. 03. Go 语言容器

    Go语言容器(container) 变量在一定程度上能满足函数及代码要求.如果编写一些复杂算法.结构和逻辑,就需要更复杂的类型来实现.这类复杂类型一般情况下具有各种形式的存储和处理数据的功能,将它们称 ...

  2. (二)羽夏看C语言——容器

    写在前面   由于此系列是本人一个字一个字码出来的,包括示例和实验截图.本人非计算机专业,可能对本教程涉及的事物没有了解的足够深入,如有错误,欢迎批评指正. 如有好的建议,欢迎反馈.码字不易,如果本篇 ...

  3. C语言如何实现继承及容器

    继承的概念 继承是面向对象软件技术当中的一个概念,与多态.封装共为面向对象的三个基本特征.继承可以使得子类具有父类的属性和方法或者重新定义,追加属性和方法. 面向对象中的重要概念就是类,在我们熟知的编 ...

  4. Go语言目录

    为什么学习Go语言 第一章 环境搭建 Windows搭建Go语言环境 第二章 Go语言基础 Go语言介绍 Go语言命名 Go语言内置类型和函数 Go语言特殊函数介绍 Go语言运算符 第三章 Go语言程 ...

  5. 08. Go 语言包(package)

    Go 语言包(package) Go 语言的源码复用建立在包(package)基础之上.Go 语言的入口 main() 函数所在的包(package)叫 main,main 包想要引用别的代码,必须同 ...

  6. GO:go语言介绍

    什么是go语言 Google开源 编译型语言 21世纪的C语言 go开发团队: go的特点 语法简洁 开发效率高 执行性能好 发展现状 最近新兴的行业公司一般会使用go语言作为主要开发语言 容器虚拟化 ...

  7. (五)羽夏看C语言——结构体与类

    写在前面   由于此系列是本人一个字一个字码出来的,包括示例和实验截图.本人非计算机专业,可能对本教程涉及的事物没有了解的足够深入,如有错误,欢迎批评指正. 如有好的建议,欢迎反馈.码字不易,如果本篇 ...

  8. (一)羽夏看C语言——简述

    "羽夏看C语言"介绍什么   本系列从汇编的角度,比较翔实的介绍C语言.C++和C其实是一样的东西,C++的编译器只是更强大,更能帮助我们写代码,例如模板.没有特殊说明,本系列不会 ...

  9. Owasp Top 10 Security Risks for 2014

    A1-互联网泄密事件/撞库攻击 以大量的用户数据为基础,利用用户相同的注册习惯(相同的用户名和密码),尝试登陆其它的网站.2011年,互联网泄密事件引爆了整个信息安全 界,导致传统的用户+密码认证的方 ...

随机推荐

  1. Ubuntu 安装配置 nginx

    作者:任明旭链接:https://www.zhihu.com/question/46241604/answer/100788789来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注 ...

  2. Sketch插件新利器——使用Mockplus DS制作设计规范

    Sketch,作为一款专为图标和界面设计而打造的优质矢量绘图工具,也是设计师们制作和完善公司企业内部设计规范系统不可或缺的设计工具. 然而,逐个导出和上传Sketch编辑优化的设计系统资源费时而费力. ...

  3. Java程序设计8——抽象类、接口与内部类

    1 抽象类 当编写一个类时,常常会为该类定义一些方法,这些方法用以描述该类的行为方式,那么这些方法都有具体的方法体.但在某些情况下,某个父类并不需要实现,因为它只需要当做一个模板,而具体的实现,可以由 ...

  4. 【转】C中的静态存储区和动态存储区

    一.内存基本构成    可编程内存在基本上分为这样的几大部分:静态存储区.堆区和栈区.他们的功能不同,对他们使用方式也就不同.    静态存储区:内存在程序编译的时候就已经分配好,这块内存在程序的整个 ...

  5. 5 CrawlSpider操作

    CrawlSpider 提问:如果想要通过爬虫程序去爬取"糗百"全站数据新闻数据的话,有几种实现方法? 方法一:基于Scrapy框架中的Spider的递归爬取进行实现(Reques ...

  6. UILabel 字体下方加下划线

        UILabel *knowKankan = [[UILabel alloc] initWithFrame:CGRectMake(0, MAINHEIGHT - 78 , MAINWIDTH, ...

  7. SDWebImage从缓存中获取图片

      if ([[SDImageCache sharedImageCache] imageFromKey:sort.imageUrl]) {         [cell.photoImageView s ...

  8. ZSTU4269 买iphone 2017-03-22 14:31 73人阅读 评论(0) 收藏

    4269: 买iphone Time Limit: 3 Sec  Memory Limit: 128 MB Submit: 1710  Solved: 316 Description 自从上次仓鼠中了 ...

  9. [leetcode] 6. Balanced Binary Tree

    这个题目纠结了一会儿,终于从二叉树转化到AVL了.题目如下: Given a binary tree, determine if it is height-balanced. For this pro ...

  10. [Erlang32]ibrowse流程及性能测试

    1.简介 ibrowse是用erlang写的一个HTTP client.github地址:https://github.com/cmullaparthi/ibrowse 使用方法见项目的readme. ...