Go 1.21新增的 maps 包详解

maps 包提供了几个非常有用的用于操作 map 类型(任何类型的 map)的函数,本文接下来详细介绍下这几个函数。

maps.Clone

定义如下:

func Clone[M ~map[K]V, K comparable, V any](m M) M

返回 m 的一个副本,因为新的键和值是使用赋值方式复制的,所以这是一个浅克隆。简单示例如下:

package mainimport ("fmt""maps"
)func main() {m := map[string]string{"foo": "bar"}m1 := maps.Clone(m)fmt.Println(m1) // map[foo:bar]
}

maps.Copy

定义如下:

func Copy[M1 ~map[K]V, M2 ~map[K]V, K comparable, V any](dst M1, src M2)

复制 src 中的所有键值对并添加到 dst 中。当 src 中的键已经在 dst 中存在时,dst 中的值将被 src 中被该键对应的值覆盖。简单示例如下:

package mainimport ("fmt""maps"
)func main() {m := map[string]string{"foo": "bar", "foo2": "bar2"}m1 := map[string]string{"foo": "bar2", "foo3": "bar3"}maps.Copy(m1, m)fmt.Println(m1) // map[foo:bar foo2:bar2 foo3:bar3]
}

maps.DeleteFunc

定义如下:

func DeleteFunc[M ~map[K]V, K comparable, V any](m M, del func(K, V) bool)

从 m 中删除经 del 函数计算后返回 true 的所有键值对。简单示例如下:

package mainimport ("fmt""maps"
)func main() {m := map[string]int{"one":   1,"two":   2,"three": 3,"four":  4,}maps.DeleteFunc(m, func(k string, v int) bool {return v%2 != 0 })fmt.Println(m)
}

删除所有值为奇数类型的键值对。

maps.Equal

定义如下:

func Equal[M1, M2 ~map[K]V, K, V comparable](m1 M1, m2 M2) bool

判断两个 map 是否包含相同的键值对。简单示例如下:

package mainimport ("fmt""maps"
)func main() {m := map[string]string{"foo": "bar", "foo2": "bar2"}m1 := map[string]string{"foo": "bar2", "foo3": "bar3"}m2 := map[string]string{"foo": "bar", "foo2": "bar2"}b := maps.Equal(m, m1)fmt.Println(b) // falseb = maps.Equal(m, m2)fmt.Println(b) // true
}

maps.EqualFunc

定义如下:

func EqualFunc[M1 ~map[K]V1, M2 ~map[K]V2, K comparable, V1, V2 any](m1 M1, m2 M2, eq func(V1, V2) bool) bool

类似于Equal函数,但使用自定义的 eq 函数进行比较。

package mainimport ("fmt""maps""strings"
)func main() {m1 := map[int]string{1:    "one",10:   "Ten",1000: "THOUSAND",}m2 := map[int][]byte{1:    []byte("One"),10:   []byte("Ten"),1000: []byte("Thousand"),}eq := maps.EqualFunc(m1, m2, func(v1 string, v2 []byte) bool {return strings.ToLower(v1) == strings.ToLower(string(v2))})fmt.Println(eq) // true
}

将值转换为小写的字符串后进行比较。

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

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

相关文章

PHP8的匿名函数-PHP8知识详解

php 8引入了匿名函数(Anonymous Functions),它是一种创建短生命周期的函数,不需要命名,并且可以在其作用域内直接使用。以下是在PHP 8中使用匿名函数的知识要点: 1、创建匿名函数,语法格式如下&…

Oracle-rolling upgrade升级19c

前言: 本文主要描述Oracle11g升19c rolling upgrade升级测试,通过逻辑DGautoupgrade方式实现rolling upgrade,从而达到在较少停机时间内完成Oracle11g升级到19c的目标 升级介绍: 升级技术: rolling upgrade轮询升级,通过采用跨版…

transform_train.json文件解析

transform_train.json 文件内容解析transform_matrix 文件内容解析 {"camera_angle_x": 0.6911112070083618,"frames": [{"file_path": "./train/r_0","rotation": 0.012566370614359171,"transform_matrix": [[…

快速掌握MQ消息中间件rabbitmq

快速掌握MQ消息中间件rabbitmq 目录概述需求: 设计思路实现思路分析1.video 参考资料和推荐阅读 Survive by day and develop by night. talk for import biz , show your perfect code,full busy,skip hardness,make a better result,wait for change,c…

02.sqlite3学习——嵌入式数据库的基本要求和SQLite3的安装

目录 嵌入式数据库的基本要求和SQLite3的安装 嵌入式数据库的基本要求 常见嵌入式数据库 sqlite3简介 SQLite3编程接口模型 ubuntu 22.04下的SQLite安装 嵌入式数据库的基本要求和SQLite3的安装 嵌入式数据库的基本要求 常见嵌入式数据库 sqlite3简介 SQLite3编程接口模…

2023-08-27力扣每日一题-QWQ

链接&#xff1a; 56. 合并区间 题意&#xff1a; 如题 解&#xff1a; 排序题&#xff0c;先将最早出现且最大的区间放在前面即可&#xff0c;差一点就要补卡了 23:59通过 实际代码&#xff1a; #include<bits/stdc.h> using namespace std; class Solution { pu…

Eclipse(STS):pom.xml 报错:Multiple markers at this line

pom.xml 报错&#xff1a;Multiple markers at this line STS中&#xff0c;项目能够正常运行&#xff0c;但是 pom.xml 报错&#xff1a;Multiple markers at this line 项目本身没有任何修改&#xff0c;之前不报错的&#xff0c;突然报错了。 Multiple markers at this li…

LLM-Rec:基于提示大语言模型的个性化推荐

1. 基本信息 论文题目:LLM-Rec: Personalized Recommendation via Prompting Large Language Models 作者:Hanjia Lyu, Song Jiang, Hanqing Zeng, Yinglong Xia, Jiebo Luo 机构:University of Rochester, University of California Los Angeles, Meta AI, University of Ro…

手写RPC框架--1.介绍与网络传输

介绍与网络传输 0.介绍a.什么是rpcb.rpc的通信流程 1.网络传输a.零拷贝1) 零拷贝的概念2) Netty的零拷贝 b.IO多路复用c.Netty入门1) netty中的helloworld d.封装报文1) 协议结构2) 模拟封装报文 e.序列化f.压缩和解压缩 0.介绍 a.什么是rpc rpc 的全称是 Remote Procedure C…

计算机视觉 – Computer Vision | CV

计算机视觉为什么重要&#xff1f; 人的大脑皮层&#xff0c; 有差不多 70% 都是在处理视觉信息。 是人类获取信息最主要的渠道&#xff0c;没有之一。 在网络世界&#xff0c;照片和视频&#xff08;图像的集合&#xff09;也正在发生爆炸式的增长&#xff01; 下图是网络上…

HTML5-2-链接

HTML使用标签 <a>来设置超文本链接。 超链接可以是一个字&#xff0c;一个词&#xff0c;或者一组词&#xff0c;也可以是一幅图像&#xff0c;您可以点击这些内容来跳转到新的文档或者当前文档中的某个部分。 默认情况下&#xff0c;链接将以以下形式出现在浏览器中&am…

Python高阶函数

高阶函数是在Python中一个非常有用的功能函数&#xff0c;所谓高阶函数就是一个函数可以用来接收另一个函数作为参数&#xff0c;这样的函数叫做高阶函数。高阶函数是函数式编程的基本前提。 函数在 Python 是一等公民&#xff08;First-Class Object&#xff09;&#xff0c;…

数据结构】二叉树篇|超清晰图解和详解:后序篇

博主简介&#xff1a;努力学习的22级计算机科学与技术本科生一枚&#x1f338;博主主页&#xff1a; 是瑶瑶子啦每日一言&#x1f33c;: 你不能要求一片海洋&#xff0c;没有风暴&#xff0c;那不是海洋&#xff0c;是泥塘——毕淑敏 目录 一、核心二、题目 一、核心 我们清楚…

wireshark过滤器的使用

目录 wiresharkwireshark的基本使用wireshark过滤器的区别 抓包案例 wireshark wireshark的基本使用 抓包采用 wireshark&#xff0c;提取特征时&#xff0c;要对 session 进行过滤&#xff0c;找到关键的stream&#xff0c;这里总结了 wireshark 过滤的基本语法&#xff0c;…

帝国CMS仿管理资源吧资料下载网站模板源码/下载会员+积分付费下载功能自动采集资源网站源码

帝国CMS仿管理资源吧资料下载网站模板源码&#xff0c;带下载会员积分付费下载功能自动采集资源网站源码&#xff0c;管理资源吧——为中小企业管理者提供全方位的管理资料下载服务&#xff1b;是一个所有资料免费下载&#xff0c;免注册、免登陆、免积分的公益性的管理知识共享…

PDF校对工具正式上线,为用户提供卓越的文档校对解决方案

为满足当下对数字化文档校对的精准需求&#xff0c;我们今日正式发布全新的PDF校对工具。经过深入的技术研发与细致的测试&#xff0c;该工具旨在为企业和个人用户带来一个高效且准确的PDF文档校对平台。 PDF校对工具的主要特性&#xff1a; 1.全面性校对&#xff1a;工具支持…

React钩子函数之useEffect,useLayoutEffect与useInsertionEffect的区别

React钩子函数在React开发中扮演着非常重要的角色。其中&#xff0c;useEffect、useLayoutEffect和useInsertionEffect是三个常用的钩子函数&#xff0c;它们的作用虽然有些相似&#xff0c;但是也存在一些区别。在本文中&#xff0c;我们将详细介绍这三个钩子函数的区别&#…

【Java】数据类型变量

【Java】数据类型&变量 文章目录 【Java】数据类型&变量1、字面常量2、数据类型3、变量3.1 整型变量3.1.1 整型变量3.1.2 长短整型变量3.1.3 字节型变量 3.2 浮点型变量3.2.1 双精度浮点型3.2.2 单精度浮点型 3.3 字符型变量3.4 布尔型变量3.5 类型转换3.5.1 自动类型转…

React钩子函数之useDeferredValue的基本使用

在React中&#xff0c;使用钩子函数可以方便地管理组件的状态和副作用。useDeferredValue是React 18中新引入的钩子函数之一&#xff0c;它可以帮助我们优化渲染性能&#xff0c;让组件更加流畅。 useDeferredValue的作用是将一个值延迟更新。这个值可以是状态、属性或其他变量…

前端vue3+typescript架构

1、vue creat 项目名称 选择自定义 选择需要的依赖 选择vue3 一路enter&#xff0c;选择eslistprettier 继续enter&#xff0c;等待安装 按步骤操作&#xff0c;项目启动成功 2、vscode安装5款插件 2、代码保存自动格式化&#xff0c;保证每个开发人员代码一致&#xff0c;根目…