GO语言总结(4)——映射(Map)

上一篇博客介绍了Go语言的数组和切片——GO语言总结(3)——数组和切片,本篇博客介绍Go语言的映射(Map)

映射是一种内置的数据结构,用来保存键值对的无序集合。

(1)映射的创建

make ( map [KeyType] ValueType, initialCapacity )

make ( map [KeyType] ValueType )

map [KeyType ] ValueType {}

map [KeyType ] ValueType { key1 : value1, key2: value2, ... , keyN : valueN}

如下,用4种方式分别创建数组,其中第一种和第二种的区别在于,有没有指定初始容量,不过使用的时候则无需在意这些,因为map的本质决定了,一旦容量不够,它会自动扩容:

func test1() {
    map1 := make(map[string]string, 5)
    map2 := make(map[string]string)
    map3 := map[string]string{}
    map4 := map[string]string{"a": "1", "b": "2", "c": "3"}
    fmt.Println(map1, map2, map3, map4)
}

输出如下:

map[] map[] map[] map[c:3 a:1 b:2]

(2)映射的填充和遍历

func test2() {
    map1 := make(map[string]string)
    map1["a"] = "1"
    map1["b"] = "2"
    map1["c"] = "3"
    for key, value := range map1 {
        fmt.Printf("%s->%-10s", key, value)
    }
}

如上,数组的填充使用 map[key] = value 的方式,遍历映射的时候,每一项都返回2个值,键和值。结果如下:

a->1         b->2         c->3    

(3)映射的查找、修改和删除

func test3() {
    map4 := map[string]string{"a": "1", "b": "2", "c": "3"}
    val, exist := map4["a"]
    val2, exist2 := map4["d"]
    fmt.Printf("%v,%v\n", exist, val)
    fmt.Printf("%v,%v\n", exist2, val2)

    map4["a"] = "8" //修改映射和添加映射没什么区别
    fmt.Printf("%v\n", map4)

    fmt.Println("删除b:")
    delete(map4, "b")
    fmt.Printf("%v", map4)
}

map指定key取对应的value时,可以指定返回两个值,第一个是对应的value,第二个是一个bool,表示是否有值。如上,“a”肯定有值,"b"肯定没值。

修改映射和添加映射的操作没什么区别,若指定的键不存在则创建,否则,修改之。

删除则是使用go的内置函数delete,输出如下:

true,1
false,
map[a:8 b:2 c:3]
删除b:
map[a:8 c:3]
时间: 2024-11-05 06:02:44

GO语言总结(4)——映射(Map)的相关文章

Go语言中映射表map的使用

1 概述 Go语言中的键值对(key->value)集合,称之为映射map.映射map是变长类型,定义时不需要指定长度.映射map是无序的,遍历是的顺序不可期,原因是底层由hash表实现.逻辑结构表示为: 2 创建语法 var m = map[key_type]value_type{key1: value1, key2: value2} var m = make(map[key_type]value_type) // 示例,字符串型下标,字符串型值: var m = make(map[strin

VIM键盘映射 (Map)~转载

VIM键盘映射 (Map) 设置键盘映射 使用:map命令,可以将键盘上的某个按键与Vim的命令绑定起来.例如使用以下命令,可以通过F5键将单词用花括号括起来: :map <F5> i{e<Esc>a}<Esc> 其中:i{将插入字符{,然后使用Esc退回到命令状态:接着用e移到单词结尾,a}增加字符},最后退至命令状态.在执行以上命令之后,光标定位在一个单词上(例如amount),按下F5键,这时字符就会变成{amount}的形式. 不同模式下的键盘映射 使用下表中不

元组Tuple、数组Array、映射Map

一.元组Tuple 元组Tuple是不同类型的值的聚集,元组的值将单个的值包含在圆括号中来构成,元组可以包含一个不同类型的元素 如 val riple = (100, "Scala" , "Spark")1.元组中可以包含不同类型的元素,如上,把鼠标放在riple上,IDE会自动推断出元组riple里面的3个元素类型分别是Int.String.String2.元组实例化后,和数组Array不同,数组Array的索引从0开始,而元组Tuple的索引从1开始.3.调用元

编程算法 - 二叉搜索树(binary search tree) 集合(set)和映射(map) 代码(C)

二叉搜索树(binary search tree) 集合(set)和映射(map) 代码(C++) 本文地址: http://blog.csdn.net/caroline_wendy 二叉搜索树(binary search tree)作为常用而高效的数据结构, 标准库中包含实现, 在标准库的集合(set)和映射(map), 均使用. 具体操作代码如下. 代码: /* * main.cpp * * Created on: 2014.7.20 * Author: spike */ /*eclipse

HIbernate Y映射 Map、list、set

1.总 set:不允许重复.无序 list:有序.重复 map:key-value对形式 2.map与set标签中的element子标签映射的是原子类型(string.data.int.long...),即就是能够直接映射到数据库表字段上的类型,而one-to-many映射的则是实体类型,指的是无法映射到表的某个字段,而是要映射到整张表的类型. 3.map (1)原子类型 public class Team { private String id; private String name; pr

Java记录 -63- Java的键值映射Map

public interface Map<K,V> 将键映射到值的对象.一个映射不能包含重复的键:每个键最多只能映射到一个值. Map接口取代 Dictionary 类,后者完全是一个抽象类,而不是一个接口. Map 接口提供三种collection 视图,允许以键集.值集或键-值映射关系集的形式查看某个映射的内容.映射顺序 定义为迭代器在映射的 collection 视图上返回其元素的顺序.某些映射实现可明确保证其顺序,如 TreeMap 类:另一些映射实现则不保证顺序,如 HashMap 

scala的多种集合的使用(6)之映射Map的操作方法

1.创建映射 1)创建不可变的映射 scala> val status = Map(1 -> "a",2 -> "b") status: scala.collection.immutable.Map[Int,String] = Map(1 -> a, 2 -> b) scala> val status = Map((1,"a"),(2,"b")) status: scala.collecti

1059 C语言竞赛 (ID映射编号映射字符串)

C 语言竞赛是浙江大学计算机学院主持的一个欢乐的竞赛.既然竞赛主旨是为了好玩,颁奖规则也就制定得很滑稽: 0.冠军将赢得一份"神秘大奖"(比如很巨大的一本学生研究论文集--). 1.排名为素数的学生将赢得最好的奖品 -- 小黄人玩偶! 2.其他人将得到巧克力. 给定比赛的最终排名以及一系列参赛者的 ID,你要给出这些参赛者应该获得的奖品. 输入格式: 输入第一行给出一个正整数 N(≤10e+4),是参赛者人数.随后 N 行给出最终排名,每行按排名顺序给出一位参赛者的 ID(4 位数字组

go语言指南之映射练习

练习:映射 实现 WordCount.它应当返回一个映射,其中包含字符串 s 中每个“单词”的个数.函数 wc.Test 会对此函数执行一系列测试用例,并输出成功还是失败. 你会发现 strings.Fields 很有帮助. 首先,我查看了一下strings.Fields的解释.给出的函数形式如下 func Fields(s string) []string 官方还给出了例子 package main import ( "fmt" "strings" ) func