一、概念

  • 简述
1、map 是一种无序的键值对的集合。(类似于python的字典dict)
2、map 的key 与 value 都是有类型的,且定义阶段时就已经统一
  • 定义方式
# 方式一
var mapName map[key_type]value_type
mapName = make(map[key_type]value_type)
// 如
// var user map[string]string
// user = make(map[string]string) # 方式二 简短声明
mapName := make(map[key_type]value_type)
// 如
// student := make(map[string]int) # 方式三
mapName := map[key_type]value_type{}
// 如
// user := map[string]string{"jmz":"上海"}

二、声明、初始化、make

  • map 也是引用类型,需要make 创建内存
package main

import "fmt"

func main(){
var user map[string]string user = make(map[string]string)
user["jmz"] = "安工大"
user["jly"] = "上核大" fmt.Println(user) data := make(map[string]int)
data["info1"] = 32
data["info2"] = 23 fmt.Println(data) student := map[string]int{"jmz":23}
fmt.Println(student)
}

三、map的增删改查

package main

import "fmt"

func main(){
// 简短声明
student := map[string]string{} // 增
student["jmz"] = "上海"
student["qqc"] = "北京"
student["gka"] = "湖北" // 改
student["jmz"] ="河南" // 查
// 判断键是否存在
v,ok := student["jms"] // ok == true 则jms 键存在对应的value
if ok {
fmt.Println(v)
} // for-range
for k,v := range student{
fmt.Printf("key:%s,value:%s \n",k,v)
}
//你会发现map的输出 是无序的,因为本来map就无序,想要有序请使用 切片 // 删
delete(student,"jmz") // 不存在的键删除 也不会报错
// delete(student,"lll") // 不会报错
fmt.Println(student) }

四、map 之函数

  • map 用法一
package main

import "fmt"

func main(){
// 简短声明
s := "中国是一个美丽的国家,China is a beautiful country" info := runeCount(s)
for k,v := range info{
fmt.Printf("%s : %d \n",string(k),v)
}
} // 字符串,解析每个字符的个数
func runeCount(s string)map[rune]int{
info := map[rune]int{} for _,v := range []rune(s){
info[v]++
}
return info
}
  • map 用法二 键值对调

package main
import (
"fmt"
) var (
barVal = map[string]int{"alpha": 34, "bravo": 56, "charlie": 23,
"delta": 87, "echo": 56, "foxtrot": 12,
"golf": 34, "hotel": 16, "indio": 87,
"juliet": 65, "kili": 43, "lima": 98}
) func main() {
invMap := make(map[int]string, len(barVal))
for k, v := range barVal {
invMap[v] = k
}
fmt.Println("inverted:")
for k, v := range invMap {
fmt.Printf("Key: %v, Value: %v / ", k, v)
}
}

如果喜欢看小说,请到183小说网

go之map的更多相关文章

  1. mapreduce中一个map多个输入路径

    package duogemap; import java.io.IOException; import java.util.ArrayList; import java.util.List; imp ...

  2. .NET Core中间件的注册和管道的构建(3) ---- 使用Map/MapWhen扩展方法

    .NET Core中间件的注册和管道的构建(3) ---- 使用Map/MapWhen扩展方法 0x00 为什么需要Map(MapWhen)扩展 如果业务逻辑比较简单的话,一条主管道就够了,确实用不到 ...

  3. Java基础Map接口+Collections工具类

    1.Map中我们主要讲两个接口 HashMap  与   LinkedHashMap (1)其中LinkedHashMap是有序的  怎么存怎么取出来 我们讲一下Map的增删改查功能: /* * Ma ...

  4. Java基础Map接口+Collections

    1.Map中我们主要讲两个接口 HashMap  与   LinkedHashMap (1)其中LinkedHashMap是有序的  怎么存怎么取出来 我们讲一下Map的增删改查功能: /* * Ma ...

  5. 多用多学之Java中的Set,List,Map

            很长时间以来一直代码中用的比较多的数据列表主要是List,而且都是ArrayList,感觉有这个玩意就够了.ArrayList是用于实现动态数组的包装工具类,这样写代码的时候就可以拉进 ...

  6. Java版本:识别Json字符串并分隔成Map集合

    前言: 最近又看了点Java的知识,于是想着把CYQ.Data V5迁移到Java版本. 过程发现坑很多,理论上看大部分很相似,实践上代码写起来发现大部分都要重新思考方案. 遇到的C#转Java的一些 ...

  7. MapReduce剖析笔记之八: Map输出数据的处理类MapOutputBuffer分析

    在上一节我们分析了Child子进程启动,处理Map.Reduce任务的主要过程,但对于一些细节没有分析,这一节主要对MapOutputBuffer这个关键类进行分析. MapOutputBuffer顾 ...

  8. MapReduce剖析笔记之七:Child子进程处理Map和Reduce任务的主要流程

    在上一节我们分析了TaskTracker如何对JobTracker分配过来的任务进行初始化,并创建各类JVM启动所需的信息,最终创建JVM的整个过程,本节我们继续来看,JVM启动后,执行的是Child ...

  9. MapReduce剖析笔记之五:Map与Reduce任务分配过程

    在上一节分析了TaskTracker和JobTracker之间通过周期的心跳消息获取任务分配结果的过程.中间留了一个问题,就是任务到底是怎么分配的.任务的分配自然是由JobTracker做出来的,具体 ...

  10. MapReduce剖析笔记之三:Job的Map/Reduce Task初始化

    上一节分析了Job由JobClient提交到JobTracker的流程,利用RPC机制,JobTracker接收到Job ID和Job所在HDFS的目录,够早了JobInProgress对象,丢入队列 ...

随机推荐

  1. 4xx错误的本质:服务器已经接收到请求

    4xx错误的本质:服务器已经接收到请求, 路径错误! { URL: http://10.100.138.32:8046/3-0/app/account/maxin } { status code: 4 ...

  2. sqlserver 批量更新

    select * from [LPicture] UPDATE [dbo].[LPicture] SET [picGroup] = ' WHERE LPictureid ,); select * fr ...

  3. 如何在linux搭建airtest+chromeweb测试环境--(用命令行运行.air脚本)

    大前堤: 如果你需要airtest提供的可视化测试报告,那你的操作系统,一定要有图形化界面. 否则运行你的airtest脚本 会遇到这样的问题 Xlib.error.DisplayNameError: ...

  4. WPF在win7运行时报'Initialization of 'System.Windows.Setter' threw an exception.'

    写的一个WPF程序,在win10运行好好的,在win7就报'Initialization of 'System.Windows.Setter' threw an exception.' 原来是xaml ...

  5. jquery动态生成二维码添加自定义logo

    动态生成二维码中间带logo. jquery.qrcode.js 动态生成二维码api很简单. 引入jquer(版本任意),引入jquery.qrcode.js 不需要中间带logo这样就可以了.带l ...

  6. 【VIP视频网站项目三】项目框架搭建、项目路由配置、数据库表结构设计

    一.项目路由的设计 目前项目代码已经全部开源:项目地址:https://github.com/xiugangzhang/vip.github.io 视频网站前台页面路由设计 路由 请求方法 模板 作用 ...

  7. 七牛直播云-m3u8格式直播

    直播架构 业务服务器:负责协调直播类应用的业务逻辑 创建直播房间 返回直播房间播放地址列表 关闭直播房间 LiveNet 实时流网络:负责流媒体的分发.直播流的创建.查询等相关操作 采集端:负责采集和 ...

  8. BZOJ 1606 USACO 2008 Dec. 购买干草

    [题意概述] 有n件物品,每件物品有体积Vi,背包容量为C,问最多可以装多少体积的物品 [题解] 显然是个无限背包嘛.. 直接做背包DP就好 注意无限背包的写法和01背包的区别 #include< ...

  9. Codeforces Round #404 (Div. 2)——ABCDE

    题目这里 A.map裸题 #include <bits/stdc++.h> using namespace std; map <string, int> p; string s ...

  10. Codeforces Round #413(Div. 1 + Div. 2, combined)——ABCD

    题目在这里 A.Carrot Cakes 乱七八糟算出两个时间比较一下就行了 又臭又长仅供参考 #include <bits/stdc++.h> #define rep(i, j, k) ...