当前位置: 首页 > news >正文

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 包提供了很多和切片相关的函数&#xff0c;可以用于任何类型的切片。 slices.Max 定义如下&#xff1a; func Max[S ~[]E, E cmp.Ordered](x S) E 返回 x 中的最大值&#xff0c;如果 x 为空&#xff0c;则 panic。对于浮点数 E, 如果有元素为 NaN&am…...

Python 在logging.config.dictConfig()日志配置方式下,使用自定义的Handler处理程序

文章目录 一、基于 RotatingFileHandler 的自定义处理程序二、基于 TimedRotatingFileHandler 的自定义处理程序 Python logging模块的基本使用、进阶使用详解 Python logging.handlers模块&#xff0c;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请求 示例一&#xff1a; 服务端代码 GetMapping("/f11") public String f11(Integer pageNum, Integer pageSize) {return pageNum " : " pageSize; }前端代码 <template><div class"home"><button click"getFun1…...

基于开源模型搭建实时人脸识别系统(四):人脸质量

续人脸识别实战之基于开源模型搭建实时人脸识别系统&#xff08;三&#xff09;&#xff1a;人脸关键点、对齐模型概览与模型选型_CodingInCV的博客-CSDN博客 不论对于静态的人脸识别还是动态的人脸识别&#xff0c;我们都会面临一个问题&#xff0c;就是输入的人脸图像的质量可…...

【开发笔记】ubuntu部署指定版本的前后端运行环境(npm nodejs mysql)

目录 1 背景2 环境要求3 部署流程3.1 npm的安装3.2 nodejs的安装3.3 MySQL的安装 4 可能的问题 1 背景 在远程服务器上的Ubuntu系统中&#xff0c;部署指定版本的前后端项目的运行环境 2 环境要求 npm 9.5.1Nodejs v18.16.1MySQL 8.0.33 3 部署流程 3.1 npm的安装 通过安…...

用于优化开关性能的集成异质结二极管的4H-SiC沟道MOSFET

标题&#xff1a;4H-SiC Trench MOSFET with Integrated Heterojunction Diode for Optimizing Switching Performance 摘要 本研究提出了一种新型的4H-SiC沟道MOSFET&#xff0c;其在栅槽底部集成了异质结二极管&#xff08;HJD-TMOS&#xff09;&#xff0c;并通过TCAD模拟进…...

优化个人博客总结

前面学习完怎么搭建个人博客&#xff0c;后面要做的就是排版优化自己的博客了&#xff0c;今天通过教程学习到了然后更爱美化其中的效果&#xff0c;还通过改写代码来带到基本的效果展示&#xff0c;同时也把最开始学习的计算速成课的笔记输出在上面&#xff0c;这也是一个很好…...

从零构建深度学习推理框架-9 再探Tensor类,算子输入输出的分配

再探Tensor类&#xff1a; 第二节中我们编写的Tensor类其实并不能满足我们的使用需要&#xff0c;我们将在这一节以代码阅读的方式来看看一个完全版本的Tensor应该具备怎样的要素&#xff0c;同时我们对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这个接口&#xff0c;我们一起来了解这个组件&#xff0c;并简单使用它吧。&#x1f92d; 引言 在开发Spring Boot应用程序时&#xff0c;应用程序的初始化和启动是一个重要的环节。ApplicationRunner是Spring Boot提供的一个有用的接口&#xff0c;可以帮助…...

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 目录 前言 无重叠区间&#xff08;筛选区间&#xff09; 划分字母区间&#xff08;切割区间&#xff09; 合并区间 前言 今日的重点是掌握重叠区问题。 无重叠区间&#xff08;筛选区间&#xff09; int eraseOverlapIntervals(vector<vector<in…...

基于Jenkins构建生产CICD环境、jenkins安装

目录 Jenkins简介 安装配置Jenkins Jenkins简介 Jenkins是一个用Java编写的开源的持续集成工具。在与Oracle发生争执后&#xff0c;项目从Hudson项目独立。官方网站&#xff1a;https://jenkins.io/。 Jenkins提供了软件开发的持续集成服务。它运行在Servlet容器中&#xff…...

基于Java SpringBoot+vue+html 的地方美食系统(2.0版本)

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝30W,csdn、博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 文章目录 1 简介2 技术栈3 系统流程的分析3.1 用户管理的流程3.2个人中心管理流程3.3登录流程 4系统设计…...

opencv-gpu版本编译(添加java支持,可选)实现硬解码

目录 opencv gpu版本编译&#xff0c;实现硬解码&#xff0c;加速rtsp视频流读取1、准备文件2、复制 NVCUVID 头文件到 cuda 安装目录 include3、安装相关依赖4、 执行cmake5、编译安装6、测试 opencv gpu版本编译&#xff0c;实现硬解码&#xff0c;加速rtsp视频流读取 前置条…...

数据分析问答总结

一、SQL窗口函数 1.是什么 OLAP&#xff08;Online Anallytical Processing联机分析处理&#xff09;&#xff0c;对数据库数据进行实时分析处理。 2.基本语法&#xff1a; <窗口函数>OVER &#xff08;PARTITION BY <用于分组的列名> ORDER BY <用于排序的…...

Python学习笔记_实战篇(二)_django多条件筛选搜索

多条件搜索在很多网站上都有用到&#xff0c;比如京东&#xff0c;淘宝&#xff0c;51cto&#xff0c;等等好多购物教育网站上都有&#xff0c;当然网上也有很多开源的比楼主写的好的多了去了&#xff0c;仅供参考&#xff0c;哈哈 先来一张效果图吧&#xff0c;不然幻想不出来…...

【生态经济学】利用R语言进行经济学研究技术——从数据的收集与清洗、综合建模评价、数据的分析与可视化、因果推断等方面入手

查看原文>>>如何快速掌握利用R语言进行经济学研究技术——从数据的收集与清洗、综合建模评价、数据的分析与可视化、因果推断等方面入手 近年来&#xff0c;人工智能领域已经取得突破性进展&#xff0c;对经济社会各个领域都产生了重大影响&#xff0c;结合了统计学、…...

xml中的vo是干什么用的

在Java中&#xff0c;VO&#xff08;Value Object&#xff09;是一种常见的设计模式&#xff0c;用于表示纯粹的数据对象。VO 通常用于在不同层或模块之间传递数据&#xff0c;并且它们的主要目的是封装和组织数据&#xff0c;而不包含业务逻辑。 VO 在Java中的具体作用有以下…...

基于算法竞赛的c++编程(28)结构体的进阶应用

结构体的嵌套与复杂数据组织 在C中&#xff0c;结构体可以嵌套使用&#xff0c;形成更复杂的数据结构。例如&#xff0c;可以通过嵌套结构体描述多层级数据关系&#xff1a; struct Address {string city;string street;int zipCode; };struct Employee {string name;int id;…...

pam_env.so模块配置解析

在PAM&#xff08;Pluggable Authentication Modules&#xff09;配置中&#xff0c; /etc/pam.d/su 文件相关配置含义如下&#xff1a; 配置解析 auth required pam_env.so1. 字段分解 字段值说明模块类型auth认证类模块&#xff0c;负责验证用户身份&am…...

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility 1. 实验室环境1.1 实验室环境1.2 小测试 2. The Endor System2.1 部署应用2.2 检查现有策略 3. Cilium 策略实体3.1 创建 allow-all 网络策略3.2 在 Hubble CLI 中验证网络策略源3.3 …...

令牌桶 滑动窗口->限流 分布式信号量->限并发的原理 lua脚本分析介绍

文章目录 前言限流限制并发的实际理解限流令牌桶代码实现结果分析令牌桶lua的模拟实现原理总结&#xff1a; 滑动窗口代码实现结果分析lua脚本原理解析 限并发分布式信号量代码实现结果分析lua脚本实现原理 双注解去实现限流 并发结果分析&#xff1a; 实际业务去理解体会统一注…...

汇编常见指令

汇编常见指令 一、数据传送指令 指令功能示例说明MOV数据传送MOV EAX, 10将立即数 10 送入 EAXMOV [EBX], EAX将 EAX 值存入 EBX 指向的内存LEA加载有效地址LEA EAX, [EBX4]将 EBX4 的地址存入 EAX&#xff08;不访问内存&#xff09;XCHG交换数据XCHG EAX, EBX交换 EAX 和 EB…...

select、poll、epoll 与 Reactor 模式

在高并发网络编程领域&#xff0c;高效处理大量连接和 I/O 事件是系统性能的关键。select、poll、epoll 作为 I/O 多路复用技术的代表&#xff0c;以及基于它们实现的 Reactor 模式&#xff0c;为开发者提供了强大的工具。本文将深入探讨这些技术的底层原理、优缺点。​ 一、I…...

安卓基础(aar)

重新设置java21的环境&#xff0c;临时设置 $env:JAVA_HOME "D:\Android Studio\jbr" 查看当前环境变量 JAVA_HOME 的值 echo $env:JAVA_HOME 构建ARR文件 ./gradlew :private-lib:assembleRelease 目录是这样的&#xff1a; MyApp/ ├── app/ …...

基于Java+MySQL实现(GUI)客户管理系统

客户资料管理系统的设计与实现 第一章 需求分析 1.1 需求总体介绍 本项目为了方便维护客户信息为了方便维护客户信息&#xff0c;对客户进行统一管理&#xff0c;可以把所有客户信息录入系统&#xff0c;进行维护和统计功能。可通过文件的方式保存相关录入数据&#xff0c;对…...

HybridVLA——让单一LLM同时具备扩散和自回归动作预测能力:训练时既扩散也回归,但推理时则扩散

前言 如上一篇文章《dexcap升级版之DexWild》中的前言部分所说&#xff0c;在叠衣服的过程中&#xff0c;我会带着团队对比各种模型、方法、策略&#xff0c;毕竟针对各个场景始终寻找更优的解决方案&#xff0c;是我个人和我司「七月在线」的职责之一 且个人认为&#xff0c…...

redis和redission的区别

Redis 和 Redisson 是两个密切相关但又本质不同的技术&#xff0c;它们扮演着完全不同的角色&#xff1a; Redis: 内存数据库/数据结构存储 本质&#xff1a; 它是一个开源的、高性能的、基于内存的 键值存储数据库。它也可以将数据持久化到磁盘。 核心功能&#xff1a; 提供丰…...