Go 1.21新增的 slices 包详解(三)
Go 1.21新增的 slices 包提供了很多和切片相关的函数,可以用于任何类型的切片。
slices.Max
定义如下:
func Max[S ~[]E, E cmp.Ordered](x S) E
返回 x 中的最大值,如果 x 为空,则 panic。对于浮点数 E, 如果有元素为 NaN,结果就是 NaN。简单示例如下:
package mainimport ("fmt""math""slices"
)func main() {numbers := []int{0, 10, -1, 8}fmt.Println(slices.Max(numbers)) // 10 numbers2 := []float64{0, 10, -1, 8, math.NaN()}fmt.Println(slices.Max(numbers2)) // NaN
}
slices.MaxFunc
定义如下:
func MaxFunc[S ~[]E, E any](x S, cmp func(a, b E) int) E
返回 x 中的最大值,使用 cmp 函数来比较元素,如果 x 为空,则 panic。如果根据 cmp 函数计算后有多个最大元素,返回第一个。简单示例如下:
package mainimport ("cmp""fmt""slices"
)func main() {type Person struct {Name stringAge int}people := []Person{{"Gopher", 13},{"Alice", 55},{"Vera", 24},{"Bob", 55},}firstOldest := slices.MaxFunc(people, func(a, b Person) int {return cmp.Compare(a.Age, b.Age)})fmt.Println(firstOldest.Name) // Alice
}
slices.Min
定义如下:
func Min[S ~[]E, E cmp.Ordered](x S) E
返回 x 中的最小值,如果 x 为空,则 panic。对于浮点数 E, 如果有元素为 NaN,结果就是 NaN。简单示例如下:
package mainimport ("fmt""math""slices"
)func main() {numbers := []int{0, 10, -1, 8}fmt.Println(slices.Min(numbers)) // -1numbers2 := []float64{0, 10, -1, 8, math.NaN()}fmt.Println(slices.Min(numbers2)) // NaN
}
slices.MinFunc
定义如下:
func MinFunc[S ~[]E, E any](x S, cmp func(a, b E) int) E
返回 x 中的最小值,使用 cmp 函数来比较元素,如果 x 为空,则 panic。如果根据 cmp 函数计算后有多个最小元素,返回第一个。简单示例如下:
package mainimport ("cmp""fmt""slices"
)func main() {type Person struct {Name stringAge int}people := []Person{{"Gopher", 13},{"Alice", 55},{"Vera", 24},{"Bob", 55},}firstYoungest := slices.MinFunc(people, func(a, b Person) int {return cmp.Compare(a.Age, b.Age)})fmt.Println(firstYoungest.Name) // Gopher
}
slices.Replace
定义如下:
func Replace[S ~[]E, E any](s S, i, j int, v ...E) S
将元素 s[i:j] 替换为给定的 v,并返回修改后的切片。如果 s[i:j] 不是 s 的一部分,则 panic。简单示例如下:
package mainimport ("fmt""slices"
)func main() {names := []string{"Alice", "Bob", "Vera", "Zac"}names = slices.Replace(names, 1, 3, "Bill", "Billie", "Cat")fmt.Println(names) // [Alice Bill Billie Cat Zac]
}
slices.Reverse
定义如下:
func Reverse[S ~[]E, E any](s S)
反转切片中的元素。简单示例如下:
package mainimport ("fmt""slices"
)func main() {names := []string{"alice", "Bob", "VERA"}slices.Reverse(names)fmt.Println(names) // [VERA Bob alice]
}
slices.Sort
定义如下:
func Sort[S ~[]E, E cmp.Ordered](x S)
对有序类型的切片进行升序排序。对于浮点数类型,NaN 排在其它值之前。简单示例如下:
package mainimport ("fmt""math""slices"
)func main() {s1 := []int8{0, 42, -10, 8}slices.Sort(s1) fmt.Println(s1) // [-10 0 8 42]s2 := []float64{0, math.NaN(), -10, 8, math.NaN()}slices.Sort(s2)fmt.Println(s2) // [NaN NaN -10 0 8]
}
slices.SortFunc
定义如下:
func SortFunc[S ~[]E, E any](x S, cmp func(a, b E) int)
按照 cmp 函数确定的升序对切片 x 进行排序,这种排序不能保证稳定。Cmp (a, b) 函数应该在 a < b 时返回一个负数,在 a > b 时返回一个正数,在 a == b 时返回零。SortFunc 要求 cmp 函数是严格的弱排序类型。简单示例如下:
package mainimport ("cmp""fmt""slices""strings"
)func main() {names := []string{"Bob", "alice", "VERA"}slices.SortFunc(names, func(a, b string) int {return cmp.Compare(strings.ToLower(a), strings.ToLower(b))})fmt.Println(names) // [alice Bob VERA]
}
slices.SortStableFunc
定义如下:
func SortStableFunc[S ~[]E, E any](x S, cmp func(a, b E) int)
对切片 x 进行排序,同时保持相等元素的原始顺序,使用 cmp 以与 SortFunc 相同的方式比较元素。简单示例如下:
package mainimport ("cmp""fmt""slices"
)func main() {type Person struct {Name stringAge int}people := []Person{{"Gopher", 13},{"Alice", 20},{"Bob", 24},{"Alice", 55},}// Stable sort by name, keeping age ordering of Alices intactslices.SortStableFunc(people, func(a, b Person) int {return cmp.Compare(a.Name, b.Name)})fmt.Println(people) // [{Alice 20} {Alice 55} {Bob 24} {Gopher 13}]
}
相关文章:
Go 1.21新增的 slices 包详解(三)
Go 1.21新增的 slices 包提供了很多和切片相关的函数,可以用于任何类型的切片。 slices.Max 定义如下: func Max[S ~[]E, E cmp.Ordered](x S) E 返回 x 中的最大值,如果 x 为空,则 panic。对于浮点数 E, 如果有元素为 NaN&am…...
Python 在logging.config.dictConfig()日志配置方式下,使用自定义的Handler处理程序
文章目录 一、基于 RotatingFileHandler 的自定义处理程序二、基于 TimedRotatingFileHandler 的自定义处理程序 Python logging模块的基本使用、进阶使用详解 Python logging.handlers模块,RotatingFileHandler、TimedRotatingFileHandler 处理器各参数详细介绍 …...
Anaconda, Python, Jupyter和PyCharm介绍
目录 1 Anaconda, Python, Jupyter和PyCharm介绍 2 macOS通过Anaconda安装Python, Jupyter和PyCharm 3 使用终端创建虚拟环境并安装PyTorch 4 安装PyCharm并导入Anaconda虚拟环境 5 Windows操作系统下Anaconda与PyCharm安装 6 通过 Anaconda Navigator 创建 TensorFlow 虚…...
axios 各种方式的请求 示例
GET请求 示例一: 服务端代码 GetMapping("/f11") public String f11(Integer pageNum, Integer pageSize) {return pageNum " : " pageSize; }前端代码 <template><div class"home"><button click"getFun1…...
基于开源模型搭建实时人脸识别系统(四):人脸质量
续人脸识别实战之基于开源模型搭建实时人脸识别系统(三):人脸关键点、对齐模型概览与模型选型_CodingInCV的博客-CSDN博客 不论对于静态的人脸识别还是动态的人脸识别,我们都会面临一个问题,就是输入的人脸图像的质量可…...
【开发笔记】ubuntu部署指定版本的前后端运行环境(npm nodejs mysql)
目录 1 背景2 环境要求3 部署流程3.1 npm的安装3.2 nodejs的安装3.3 MySQL的安装 4 可能的问题 1 背景 在远程服务器上的Ubuntu系统中,部署指定版本的前后端项目的运行环境 2 环境要求 npm 9.5.1Nodejs v18.16.1MySQL 8.0.33 3 部署流程 3.1 npm的安装 通过安…...
用于优化开关性能的集成异质结二极管的4H-SiC沟道MOSFET
标题:4H-SiC Trench MOSFET with Integrated Heterojunction Diode for Optimizing Switching Performance 摘要 本研究提出了一种新型的4H-SiC沟道MOSFET,其在栅槽底部集成了异质结二极管(HJD-TMOS),并通过TCAD模拟进…...
优化个人博客总结
前面学习完怎么搭建个人博客,后面要做的就是排版优化自己的博客了,今天通过教程学习到了然后更爱美化其中的效果,还通过改写代码来带到基本的效果展示,同时也把最开始学习的计算速成课的笔记输出在上面,这也是一个很好…...
从零构建深度学习推理框架-9 再探Tensor类,算子输入输出的分配
再探Tensor类: 第二节中我们编写的Tensor类其实并不能满足我们的使用需要,我们将在这一节以代码阅读的方式来看看一个完全版本的Tensor应该具备怎样的要素,同时我们对Tensor类的分析来看看在C中一个设计好的类应该是怎么样的。 Tensor<fl…...
Vue使用element-ui
main.js配置 //引入Vue import Vue from vue //引入App import App from ./App.vue//完整引入 //引入ElementUI组件库 // import ElementUI from element-ui; //引入ElementUI全部样式 // import element-ui/lib/theme-chalk/index.css;//按需引入 import { Button,Row,DatePi…...
使用ApplicationRunner简化Spring Boot应用程序的初始化和启动
ApplicationRunner这个接口,我们一起来了解这个组件,并简单使用它吧。🤭 引言 在开发Spring Boot应用程序时,应用程序的初始化和启动是一个重要的环节。ApplicationRunner是Spring Boot提供的一个有用的接口,可以帮助…...
Vue 2.x 项目升级到 Vue 3详细指南【修改清单】
文章目录 前言0.迁移过程1. 安装 Vue 32. 逐一处理迁移中的警告3. 迁移全局和内部 API4. 迁移 Vue Router 和 Vuex5. 处理其他的不兼容变更 1. Vue3特性1. Composition API2. 更好的性能3. 更好的 TypeScript 支持4. 多个根元素5. Suspense 组件6. Teleport 组件7. 全局 API 的…...
【算法日志】贪心算法刷题:重叠区问题(day31)
代码随想录刷题60Day 目录 前言 无重叠区间(筛选区间) 划分字母区间(切割区间) 合并区间 前言 今日的重点是掌握重叠区问题。 无重叠区间(筛选区间) int eraseOverlapIntervals(vector<vector<in…...
基于Jenkins构建生产CICD环境、jenkins安装
目录 Jenkins简介 安装配置Jenkins Jenkins简介 Jenkins是一个用Java编写的开源的持续集成工具。在与Oracle发生争执后,项目从Hudson项目独立。官方网站:https://jenkins.io/。 Jenkins提供了软件开发的持续集成服务。它运行在Servlet容器中ÿ…...
基于Java SpringBoot+vue+html 的地方美食系统(2.0版本)
博主介绍:✌程序员徐师兄、7年大厂程序员经历。全网粉丝30W,csdn、博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 文章目录 1 简介2 技术栈3 系统流程的分析3.1 用户管理的流程3.2个人中心管理流程3.3登录流程 4系统设计…...
opencv-gpu版本编译(添加java支持,可选)实现硬解码
目录 opencv gpu版本编译,实现硬解码,加速rtsp视频流读取1、准备文件2、复制 NVCUVID 头文件到 cuda 安装目录 include3、安装相关依赖4、 执行cmake5、编译安装6、测试 opencv gpu版本编译,实现硬解码,加速rtsp视频流读取 前置条…...
数据分析问答总结
一、SQL窗口函数 1.是什么 OLAP(Online Anallytical Processing联机分析处理),对数据库数据进行实时分析处理。 2.基本语法: <窗口函数>OVER (PARTITION BY <用于分组的列名> ORDER BY <用于排序的…...
Python学习笔记_实战篇(二)_django多条件筛选搜索
多条件搜索在很多网站上都有用到,比如京东,淘宝,51cto,等等好多购物教育网站上都有,当然网上也有很多开源的比楼主写的好的多了去了,仅供参考,哈哈 先来一张效果图吧,不然幻想不出来…...
【生态经济学】利用R语言进行经济学研究技术——从数据的收集与清洗、综合建模评价、数据的分析与可视化、因果推断等方面入手
查看原文>>>如何快速掌握利用R语言进行经济学研究技术——从数据的收集与清洗、综合建模评价、数据的分析与可视化、因果推断等方面入手 近年来,人工智能领域已经取得突破性进展,对经济社会各个领域都产生了重大影响,结合了统计学、…...
xml中的vo是干什么用的
在Java中,VO(Value Object)是一种常见的设计模式,用于表示纯粹的数据对象。VO 通常用于在不同层或模块之间传递数据,并且它们的主要目的是封装和组织数据,而不包含业务逻辑。 VO 在Java中的具体作用有以下…...
Redis相关知识总结(缓存雪崩,缓存穿透,缓存击穿,Redis实现分布式锁,如何保持数据库和缓存一致)
文章目录 1.什么是Redis?2.为什么要使用redis作为mysql的缓存?3.什么是缓存雪崩、缓存穿透、缓存击穿?3.1缓存雪崩3.1.1 大量缓存同时过期3.1.2 Redis宕机 3.2 缓存击穿3.3 缓存穿透3.4 总结 4. 数据库和缓存如何保持一致性5. Redis实现分布式…...
iPhone密码忘记了办?iPhoneUnlocker,iPhone解锁工具Aiseesoft iPhone Unlocker 高级注册版分享
平时用 iPhone 的时候,难免会碰到解锁的麻烦事。比如密码忘了、人脸识别 / 指纹识别突然不灵,或者买了二手 iPhone 却被原来的 iCloud 账号锁住,这时候就需要靠谱的解锁工具来帮忙了。Aiseesoft iPhone Unlocker 就是专门解决这些问题的软件&…...
为什么需要建设工程项目管理?工程项目管理有哪些亮点功能?
在建筑行业,项目管理的重要性不言而喻。随着工程规模的扩大、技术复杂度的提升,传统的管理模式已经难以满足现代工程的需求。过去,许多企业依赖手工记录、口头沟通和分散的信息管理,导致效率低下、成本失控、风险频发。例如&#…...
Cloudflare 从 Nginx 到 Pingora:性能、效率与安全的全面升级
在互联网的快速发展中,高性能、高效率和高安全性的网络服务成为了各大互联网基础设施提供商的核心追求。Cloudflare 作为全球领先的互联网安全和基础设施公司,近期做出了一个重大技术决策:弃用长期使用的 Nginx,转而采用其内部开发…...
微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据
微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据 Power Query 具有大量专门帮助您清理和准备数据以供分析的功能。 您将了解如何简化复杂模型、更改数据类型、重命名对象和透视数据。 您还将了解如何分析列,以便知晓哪些列包含有价值的数据,…...
浪潮交换机配置track检测实现高速公路收费网络主备切换NQA
浪潮交换机track配置 项目背景高速网络拓扑网络情况分析通信线路收费网络路由 收费汇聚交换机相应配置收费汇聚track配置 项目背景 在实施省内一条高速公路时遇到的需求,本次涉及的主要是收费汇聚交换机的配置,浪潮网络设备在高速项目很少,通…...
深入浅出深度学习基础:从感知机到全连接神经网络的核心原理与应用
文章目录 前言一、感知机 (Perceptron)1.1 基础介绍1.1.1 感知机是什么?1.1.2 感知机的工作原理 1.2 感知机的简单应用:基本逻辑门1.2.1 逻辑与 (Logic AND)1.2.2 逻辑或 (Logic OR)1.2.3 逻辑与非 (Logic NAND) 1.3 感知机的实现1.3.1 简单实现 (基于阈…...
[ACTF2020 新生赛]Include 1(php://filter伪协议)
题目 做法 启动靶机,点进去 点进去 查看URL,有 ?fileflag.php说明存在文件包含,原理是php://filter 协议 当它与包含函数结合时,php://filter流会被当作php文件执行。 用php://filter加编码,能让PHP把文件内容…...
【WebSocket】SpringBoot项目中使用WebSocket
1. 导入坐标 如果springboot父工程没有加入websocket的起步依赖,添加它的坐标的时候需要带上版本号。 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-websocket</artifactId> </dep…...
起重机起升机构的安全装置有哪些?
起重机起升机构的安全装置是保障吊装作业安全的关键部件,主要用于防止超载、失控、断绳等危险情况。以下是常见的安全装置及其功能和原理: 一、超载保护装置(核心安全装置) 1. 起重量限制器 功能:实时监测起升载荷&a…...
