map是Go提供的另外一种集合,他可以:

①将key映射到value;

②快速通过key找到对应的value;

同时,它的key几乎可以是任何类型。

声明map,必须指定key和value的类型:

下面来看一个简单的例程,在该例程中,是将温度的数值通过映射的方式传递给值名,在需要调取数字的时候,直接调取值名即可:

package mainimport ("fmt"
)func main() {temperature := map[string]int{"Earth": 15,"Mars":  -65,}temp := temperature["Earth"]fmt.Printf("On average the Earth is %v° C.\n", temp)fmt.Println(temp)temperature["Earth"] = 16temperature["Venus"] = 464fmt.Println(temperature)moon := temperature["Moon"]fmt.Println(moon)
}

运行结果如下:

数组、int、float64等类型在赋值给新变量or传递至函数/方法时,会创建相应的副本(可以理解为复制一份原来函数/方法,并对这个复制的副本进行操作),但map不会创建(复制)。

package mainimport ("fmt"
)func main() {planets := map[string]string{"Earth": "Sector ZZ9","Mars":  "Sector ZZ9",}planetsMarkII := planetsplanets["Earth"] = "whoops"fmt.Println(planets)fmt.Println(planetsMarkII)delete(planets, "Earth")fmt.Println(planetsMarkII)fmt.Println(planets)
}

运行上述代码,结果如下:

在前面几节我们讲过make函数如何进行预分配,现在要讲如何使用make函数对map进行预分配。

首先要知道的是,除非使用符合字面值来初始化map,否则必须使用内置的make函数来为map分配空间。

其次,在创建map时,make函数可接受一个或两个参数(第二个参数用于为指定数量的key预先分配空间)

使用make函数创建的map,初始长度为0:

下面着重介绍一下if ok语句。它与if else语句类似,可以在此判断语句内定义变量:下面看一个简单的例子:

    if moon, ok := temperature["Moon"]; ok {fmt.Println("On average the moon is %v° C.\n", moon)} else {fmt.Println("where is the moon?")}

这个例子中的if ok语句用于判断:从map中取值是否存在。很显然,在上述例子中并没有事先定义这个map,所以该判断语句执行的是else后的内容。

if ok语句除了这个作用,还有其他两个主要的作用:

①在处理接口类型时,使用类型断言可以判断接口变量实际保存的类型。

var i interface{} = "hello"if s, ok := i.(string); ok {fmt.Println("i 是字符串类型,内容是:", s)
} else {fmt.Println("i 不是字符串类型")
}
  • i.(string) 是类型断言。
  • 如果接口 i 实际保存的是 string 类型,则 ok 为 true,否则为 false
  • 这种方式是“逗号 ok”用法在类型断言中的体现。

②从 channel 接收值判断是否关闭

从 channel 接收值时,也可以通过第二个返回值“ok”来判断 channel 是否已经关闭。

ch := make(chan int)
go func() {ch <- 42close(ch)
}()if value, ok := <-ch; ok {fmt.Println("接收到值:", value)
} else {fmt.Println("channel 已关闭且没有值可接收")
}
  • <-ch 返回两个值:接收到的值和一个布尔值 ok
  • 如果 channel 还未关闭且有值,则 ok 为 true
  • 如果 channel 被关闭且没有值可接收,则 ok 为 false

最后再看一个案例:使用map和slice实现数据分组

package mainimport ("fmt""math"
)func main() {temperatures := []float64{-28.0, 32.0, -31.0, -29.0, -23.0, -29.0, -28.0, -33.0,}groups := make(map[float64][]float64)for _, t := range temperatures {g := math.Trunc(t/10) * 10 //math.Trunc(xx):把Trunc内数值的小数位去掉groups[g] = append(groups[g], t)}for g, temperatures := range groups {fmt.Printf("%v: %v\n", g, temperatures)}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/95150.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/95150.shtml
英文地址,请注明出处:http://en.pswp.cn/web/95150.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于51单片机的配电室远程监控系统设计环境检测GSM环境报警设计

基于51单片机的配电室远程监控系统设计与环境检测GSM报警系统 1. 系统功能介绍 本设计是一种基于 STC89C51/STC89C52 单片机 的智能配电室环境监控与报警系统。该系统将温湿度检测、水位检测、烟雾检测、入侵检测与风扇、水泵控制相结合&#xff0c;同时配合 SIM900 GSM 模块 实…

从RNN到Transformer

从RNN到Transformer 目录 基础篇&#xff1a;序列模型概述RNN循环神经网络LSTM长短期记忆网络Transformer架构时间序列预测应用计算机视觉应用大语言模型应用实战与优化前沿发展 基础篇&#xff1a;序列模型概述 {#基础篇} 什么是序列数据&#xff1f; 序列数据是按照特定顺…

【Java进阶】Java与SpringBoot线程池深度优化指南

Java与SpringBoot线程池深度优化指南Java与SpringBoot线程池深度优化指南一、Java原生线程池核心原理1. ThreadPoolExecutor 核心参数关键参数解析&#xff1a;2. 阻塞队列选择策略3. 拒绝策略对比二、SpringBoot线程池配置与优化1. 自动配置线程池2. 异步任务配置类3. 自定义异…

mysql(自写)

Mysql介于应用和数据之间&#xff0c;通过一些设计 &#xff0c;将大量数据变成一张张像excel的数据表数据页&#xff1a;mysql将数据拆成一个一个的数据页索引&#xff1a;为每个页加入页号&#xff0c;再为每行数据加入序号&#xff0c;这个序号就是所谓的主键。 将每个页的…

Nginx 502 Bad Gateway:从 upstream 日志到 FastCGI 超时复盘

Nginx 502 Bad Gateway&#xff1a;从 upstream 日志到 FastCGI 超时复盘 &#x1f31f; Hello&#xff0c;我是摘星&#xff01; &#x1f308; 在彩虹般绚烂的技术栈中&#xff0c;我是那个永不停歇的色彩收集者。 &#x1f98b; 每一个优化都是我培育的花朵&#xff0c;每一…

Dreamore AI-解读并描绘你的梦境

本文转载自&#xff1a;Dreamore AI-解读并描绘你的梦境 - Hello123工具导航 ** 一、&#x1f319; 初识 Dreamore AI&#xff1a;你的智能梦境伴侣 Dreamore AI 是一款超有趣的AI 梦境解析与可视化工具&#xff0c;它巧妙地把梦境解读和图像生成这两大功能融为一体。你只需要…

集合-单列集合(Collection)

List系列集合&#xff1a;添加的元素是有序、可重复、有索引的。Set系列集合&#xff1a;添加的元素是无序、不重复、无索引的。代码&#xff1a;public class A01_CollectionDemo1 {public static void main(String[] args) {/** 注意点&#xff1a;Collection是一个接口&…

写一个 RTX 5080 上的 cuda gemm fp16

1. cpu 计算 fp16 四则运算由于会用到cpu 的gemm 与 gpu gemm 的对比验证&#xff0c;所以&#xff0c;这里稍微解释一下 cpu 计算fp16 gemm 的过程。这里为了简化理解&#xff0c;cpu 中不使用 avx 相关的 fp16 运算器&#xff0c;而是直接使用 cpu 原先的 ALU 功能。这里使用…

web渗透PHP反序列化漏洞

web渗透PHP反序列化漏洞1&#xff09;PHP反序列化漏洞反序列我们可以控制对象中的值进行攻击O:1:"C":1:{s:3:"cmd";s:8:"ipconfig";}http://127.0.0.1/1.php?xO:1:%22C%22:1:{s:3:%22cmd%22;s:3:%22ver%22;}常见的反序列化魔术方法&#xff1a;…

FPGA学习笔记——SPI读写FLASH

目录 一、任务 二、需求分析 三、Visio图 四、具体分析 五、IP核配置 六、代码 七、实验现象 一、任务 实验任务&#xff1a; 1.按下按键key1&#xff0c;开启读ID操作&#xff0c;将读出来的ID&#xff0c;通过串口发送至PC端显示&#xff0c;显示格式为“读ID:XX-XX-XX…

一句话PHP木马——Web渗透测试中的隐形杀手

文章目录前言什么是"一句话木马"&#xff1f;常见变种与隐藏技巧1. 函数变种2. 加密混淆3. 变量拆分4. 特殊字符编码上传技巧与绕过防御常见上传绕过技巧检测与防御措施1. 服务器配置2. 上传验证3. 代码审计4. Web应用防火墙(WAF)实战案例分析深度思考&#xff1a;安…

房屋租赁系统|基于SpringBoot和Vue的房屋租赁系统(源码+数据库+文档)

项目介绍 : SpringbootMavenMybatis PlusVue Element UIMysql 开发的前后端分离的房屋租赁系统&#xff0c;项目分为管理端和用户端以及房主端 项目演示: 基于SpringBoot和Vue的房屋租赁系统 运行环境: 最好是java jdk 1.8&#xff0c;我们在这个平台上运行的。其他版本理论上…

C++动态规划——经典题目(下)

上一篇文章没有写全&#xff0c;这篇再补两道题酒鬼#include<bits/stdc.h> using namespace std; int dp[110][10]{0}; int a[1010]{0}; int n,m; int main() {cin>>n;dp[0][0]0;dp[1][0]0;dp[1][1]a[1];for(int i1;i<n;i){cin>>a[i];}for(int i2;i<n;…

介绍Ansible和实施Ansible PlayBook

第一章 介绍Ansible1. ansible的特点是什么&#xff1f;a. ansible使用yaml语法&#xff0c;语言格式简洁明了。b. ansible不需要代理&#xff0c;仅仅通过SSH远程连接就可以控制受管主机&#xff0c;是一种非常便捷、安全的方法。c. Ansible的功能强大&#xff0c;可以利用ans…

ComfyUI驱动的流程化大体量程序开发:构建上下文隔离的稳定系统

ComfyUI驱动的流程化大体量程序开发&#xff1a;构建上下文隔离的稳定系统 在现代软件工程中&#xff0c;随着程序体量的不断增长&#xff0c;上下文污染&#xff08;Context Pollution&#xff09;和状态依赖混乱已成为导致系统不稳定、调试困难、维护成本高昂的核心问题。尤…

基于SpringBoot的协同过滤余弦函数的美食推荐系统(爬虫Python)的设计与实现

基于SpringBootvue的协同过滤余弦函数的个性化美食(商城)推荐系统(爬虫Python)的设计与实现 1、项目的设计初衷&#xff1a; 随着互联网技术的快速发展和人们生活水平的不断提高&#xff0c;传统的美食消费模式已经无法满足现代消费者日益个性化和多样化的需求。在信息爆炸的时…

机器视觉学习-day19-图像亮度变换

1 亮度和对比度亮度&#xff1a;图像像素的整体强度&#xff0c;亮度提高就是所有的像素加一个固定值。对比度&#xff1a;当对比度提高时&#xff0c;图像的暗部与亮部的差值会变大。OpenCV调整图像亮度和对比度的公式使用一个&#xff1a;代码实践步骤&#xff1a;图片输入→…

redis详解 (最开始写博客是写redis 纪念日在写一篇redis)

Redis技术 1. Redis简介 定义与核心特性&#xff08;内存数据库、键值存储&#xff09; Redis&#xff08;Remote Dictionary Server&#xff0c;远程字典服务&#xff09;是一个开源的、基于内存的高性能键值存储数据库&#xff0c;由 Salvatore Sanfilippo 编写&#xff0c;用…

【MD文本编辑器Typora】实用工具推荐之——轻量级 Markdown 编辑器Typora下载安装使用教程 办公学习神器

本文将向大家介绍一款轻量级 Markdown 编辑器——Typora&#xff0c;并详细说明其下载、安装与基本使用方法。 引言&#xff1a; MD 格式文档指的是使用 Markdown 语言编写的文本文件&#xff0c;其文件扩展名为 .md。 Markdown 是一种由约翰格鲁伯&#xff08;John Gruber&am…

Vue2+Element 初学

大致实现以上效果 一、左侧自动加载菜单NavMenu.vue 菜单组件&#xff0c;简单调整了一下菜单直接的距离&#xff0c;代码如下&#xff1a;<template><div><template v-for"item in menus"><!-- 3、有子菜单&#xff0c;设置不同的 key 和 inde…