【golang】Golang手写元组 tuple | golang tuple
Golang手写元组 tuple
1、源码
如下:
package tupletype Tuple[T any, U any] struct {First TSecond U
}// zip combines elements of two slices into a slice of pairs (tuples), which is useful for combining related data.
func Zip[T any, U any](slice1 []T, slice2 []U) []Tuple[T, U] {length := min(len(slice1), len(slice2))result := make([]Tuple[T, U], length)for i := 0; i < length; i++ {result[i] = Tuple[T, U]{First: slice1[i], Second: slice2[i]}}return result
}func min(a, b int) int {if a < b {return a}return b
}
2、分析
这段 Go 代码定义了一个通用的 Tuple 类型和一个 Zip 函数,用于将两个切片的元素组合成一系列的元组。下面是详细分析:
2.1、Tuple 结构体
package tupletype Tuple[T any, U any] struct {First TSecond U
}
- 这定义了一个泛型的 Tuple 结构体,它包含两个字段
First和Second。 T和U是类型参数,使用any作为约束,这意味着它们可以是任何类型。- 通过这种方式,你可以创建包含任意类型数据对的元组,例如 Tuple[int, string] 或 Tuple[float64, bool]。
2.2、Zip 函数
func Zip[T any, U any](slice1 []T, slice2 []U) []Tuple[T, U] {length := min(len(slice1), len(slice2))result := make([]Tuple[T, U], length)for i := 0; i < length; i++ {result[i] = Tuple[T, U]{First: slice1[i], Second: slice2[i]}}return result
}
函数签名
Zip函数也是泛型的,它接受两个类型参数T和U。- 参数 slice1 是类型为 T 的切片,参数 slice2 是类型为 U 的切片。
- 返回值是一个包含
Tuple[T, U]的切片。
2.3、函数实现
1) 计算最小长度:
length := min(len(slice1), len(slice2))
计算两个切片的最小长度,这样可以避免越界访问。min 函数在代码中没有定义,假设它是一个返回两个整数中较小值的辅助函数。
2) 创建结果切片:
result := make([]Tuple[T, U], length)
创建一个长度为 length 的 Tuple[T, U] 切片,用于存储结果。
3) 填充结果切片:
for i := 0; i < length; i++ {result[i] = Tuple[T, U]{First: slice1[i], Second: slice2[i]}
}
使用循环遍历两个切片,在每个位置创建一个新的 Tuple,将对应位置的元素组合在一起。
4) 返回结果:
return result
3、示例使用
3.1、假设你有以下两个切片:
ints := []int{1, 2, 3}
strings := []string{"a", "b", "c", "d"}
3.2、调用 Zip 函数:
tuples := Zip(ints, strings)
3.2、tuples 的内容将是:
[]Tuple[int, string]{{First: 1, Second: "a"},{First: 2, Second: "b"},{First: 3, Second: "c"},
}
注意,由于 ints 切片的长度小于 strings 切片的长度,结果切片的长度与较短的切片一致。
相关文章:
【golang】Golang手写元组 tuple | golang tuple
Golang手写元组 tuple 1、源码 如下: package tupletype Tuple[T any, U any] struct {First TSecond U }// zip combines elements of two slices into a slice of pairs (tuples), which is useful for combining related data. func Zip[T any, U any](slice…...
golang中struct的tag -简记
今天 简单整理一下,关于golang中struct的tag type User struct {UId int gorm:"column:uid;type:bigint;unique_index;not null;comment:用户id"Name string json:"name"Age int bson:"age"From string binding:"requi…...
分布式领域扩展点设计稿
分布式领域扩展点设计稿 背景坐标设计理念设计图Quick Start相关组件 背景 随着交易业务和基础知识的沉淀,愈发觉得扩展点可以在大型交易分布式架构中可以做更多的事情。 经过一个月的思考,决定将 单点领域扩展点(savior-ext) 从…...
玩转微信公众号变现:从新手到专家的全攻略
个人名片 🎓作者简介:java领域优质创作者 🌐个人主页:码农阿豪 📞工作室:新空间代码工作室(提供各种软件服务) 💌个人邮箱:[2435024119qq.com] 📱…...
JVM: 方法调用
文章目录 一、介绍二、方法调用的原理1、静态绑定2、动态绑定(1)介绍(2)原理 一、介绍 在JVM中,一共有五个字节码指令可以执行方法调用: invokestatic: 调用静态方法。invokespecial:调用对象…...
测试面试宝典(四十一)—— 接口自动化的优缺点
接口自动化测试的优点: 1. 提高测试效率:能够快速执行大量的测试用例,节省了手动测试重复执行的时间和人力成本。 2. 尽早发现问题:可以在软件开发的早期阶段介入,有助于及时发现接口层面的缺陷,降低修复…...
“火炬科企对接”先进计算产业推进会 | 麒麟信安受邀参加,并签署开源生态合作协议
7月30日,“火炬科企对接”先进计算产业推进会在长沙隆重召开。大会由工业和信息化部火炬高技术产业开发中心、湖南省科学技术厅、湖南省工业和信息化厅、湖南湘江新区管理委员会、中国邮政储蓄银行联合举办。麒麟信安与来自国内先进计算领域的专家学者,2…...
中文网址导航模版HaoWa1.3.1/模版网站wordpress导航主题
HaoWa v1.3.1由挖主题开发的一款网址导航类主题。 HaoWA主题除主体导航列表外,对主题所需的小模块都进行了开放式的HTML编辑器形式的功能配置,同时预留出默认的代码结构,方便大家在现有的代码结构上进行功能调整。 同时加入了字体图标Font …...
图欧学习资源网创站以来的更新日志(截止至2022.5.6)不完全统计
一、网站创立和初步发展 2021年10月28日创建【TUO图欧视频备份站】,当时只有【单词视频】文件夹. 小学、初中、高中、大学、四六级、专四、专八、专升本、考研、考博、托福、雅思、托业、GRE、SAT、GMAT、MBA、新概念等 数量:500个文件,60个…...
现代前端架构介绍(第二部分):如何将功能架构分为三层
远离JavaScript疲劳和框架大战,了解真正重要的东西 在这个系列的前一部分 《App是如何由不同的构建块构成的》中,我们揭示了现代Web应用是由不同的构建块组成的,每个构建块都承担着特定的角色,如核心、功能等。在这篇文章中&#…...
LeetCode Easy|【21. 合并两个有序链表】
力扣题目链接 状态:拿到本题的第一反应就是使用双指针,分别指向两个链表的开头位置。 随后的思路就是以第一条链表为基准完成插入,并且对于遍历到的每个节点都应该保存其状态。 写了一下代码后发现,我们应该以第一个节点较小的链表…...
大模型的架构参数是指定义模型基本结构和组成的各种参数,这些参数对模型的性能、训练效率和泛化能力具有重要影响。以下是对大模型架构参数的详细介绍
大模型架构参数 大模型的架构参数是指定义模型基本结构和组成的各种参数,这些参数对模型的性能、训练效率和泛化能力具有重要影响。以下是对大模型架构参数的详细介绍: 一、基本结构和组成 层数:模型的层数是指模型中全连接网络或特定结构…...
人工智能会越来越闭源——对话东北大学副教授王言治 | Open AGI Forum
作者 | Annie Xu 责编、采访 | Echo Tang 出品丨GOSIM 开源创新汇 在读期间研究方向为并不“火”的模式识别与深度学习,毕业却刚好踩上人工智能计算研究的风口……来自美国东北大学的王言治副教授深耕深度学习与大模型,前瞻性地探索大模型的本地化部署…...
【前端】(仅思路)如何在前端实现一个fc手柄,将手机作为游戏手柄设备。
文章目录 背景界面demo原型图(没错,就是它,童年回忆) 遇到的问题最终后端demo(甚至比前端逻辑更简单) 背景 突发奇想,想要在前端实现一个fc游戏手柄,然后控制电脑的nes模拟器玩玩魂斗罗。 思路很简单&…...
三十种未授权访问漏洞合集
未授权访问漏洞介绍 未授权访问可以理解为需要安全配置或权限认证的地址、授权页面存在缺陷,导致其他用户可以直接访问,从而引发重要权限可被操作、数据库、网站目录等敏感信息泄露。---->目录遍历 目前主要存在未授权访问漏洞的有:NFS服务&a…...
【Golang 面试 - 进阶题】每日 3 题(十五)
✍个人博客:Pandaconda-CSDN博客 📣专栏地址:http://t.csdnimg.cn/UWz06 📚专栏简介:在这个专栏中,我将会分享 Golang 面试中常见的面试题给大家~ ❤️如果有收获的话,欢迎点赞👍收藏…...
Java中实现文件上传
目录 1、文件上传本地 1.1 原理 1.2 如何使用文件上传 1.2.1 引入文件上传的依赖 1.2.2 配置文件上传拦截器 1.2.3 完成文件上传的代码 2、文件上传oss服务器 2.1 为什么需要上传到oss服务器 2.2 如何使用oss 2.2.1 开启oss服务 2.2.2 在Java中引入依赖 2.2.3 查看自…...
一种别样的Unicode Python编码方式,完美转换表情和阿拉伯语
我们可能有时候在处理字符时需要处理到非ASCII的字符,比如将表情、阿拉伯语转换为Unicode字符,从而避免在传输时会出现乱码的情况。 Unicode验证网站: unicode转换网站 目的:转换下面除ASCII字符外的字符为Unicode字符…...
小白的晋升之路
编程小白如何成为大神?大学新生的最佳入门攻略 编程已成为当代大学生的必备技能,但面对众多编程语言和学习资源,新生们常常感到迷茫。如何选择适合自己的编程语言?如何制定有效的学习计划?如何避免常见的学习陷阱&…...
WebLogic:CVE-2017-10271[XML反序列化]
漏洞成因 Weblogic的WLS Security组件对外提供 webservice服务 其中使用了XMLDecoder来 解析用户传入的XML数据 在解析的过程中出现 反序列化漏洞 ,导致可执行任意命令 原理:https://xz.aliyun.com/t/10172 靶场部署 1.进入靶场目录 cd /vulhub-maste…...
60个AI核心概念,不背定义,全落到工作场景!老王手把手教你建知识库、搭Agent,附原型库+PRD模板
💡 Chunking 文档分块 你的 RAG 知识库上线了,用户问一个具体问题,系统返回了一段莫名其妙的内容。一查发现,检索到的文档片段被切在了一个句子中间,上半句话在一个块里,下半句在另一个块里。模型看到半句…...
保姆级教程:Windows下GDC-client下载TCGA数据的完整配置流程(含环境变量与配置文件修改)
Windows平台TCGA数据下载全流程:从环境配置到实战避坑指南 在生物信息学研究中,TCGA数据库无疑是癌症基因组学的宝库。但对于刚入门的研究者来说,获取这些数据往往成为第一道门槛。本文将彻底解决Windows用户在使用GDC-client工具时的各种&qu…...
UVM避坑指南:为什么你的sequence卡住了?item_done没调用的常见问题排查
UVM验证中的sequence卡死问题:item_done未调用的深度排查手册 在芯片验证领域,UVM框架的sequence机制堪称验证工程师的"瑞士军刀",但这把利器偶尔也会出现卡壳的情况。想象一下这样的场景:你的验证环境已经运行了数百个…...
baidupankey:智能解析提取码的百度网盘链接处理解决方案
baidupankey:智能解析提取码的百度网盘链接处理解决方案 【免费下载链接】baidupankey 项目地址: https://gitcode.com/gh_mirrors/ba/baidupankey 在数字化资源共享日益普及的今天,百度网盘作为国内领先的云存储服务,其分享链接的提…...
3大突破!MiroFish群体智能引擎如何重构分布式协作系统?
3大突破!MiroFish群体智能引擎如何重构分布式协作系统? 【免费下载链接】MiroFish A Simple and Universal Swarm Intelligence Engine, Predicting Anything. 简洁通用的群体智能引擎,预测万物 项目地址: https://gitcode.com/GitHub_Tren…...
零基础玩转OpenClaw:星图平台百川2-13B镜像+自动化初体验
零基础玩转OpenClaw:星图平台百川2-13B镜像自动化初体验 1. 为什么选择星图平台OpenClaw组合 作为一个长期被本地环境配置折磨的技术爱好者,当我第一次听说星图平台提供预装OpenClaw和百川2-13B模型的"开箱即用"镜像时,内心是充满…...
3步实现路由器固件自动更新:从繁琐到智能的运维升级指南
3步实现路由器固件自动更新:从繁琐到智能的运维升级指南 【免费下载链接】immortalwrt An opensource OpenWrt variant for mainland China users. 项目地址: https://gitcode.com/GitHub_Trending/im/immortalwrt 一、痛点分析:为什么手动更新让…...
解决 chattts.core 的 invalid characters 警告:高效字符处理方案
最近在折腾一个文本转语音的项目,用到了 chattts 这个库。功能很强大,但时不时就会在日志里看到一行刺眼的警告:chattts.core:invalid characters found! : {:}。这个警告虽然不会直接让程序崩溃,但就像鞋里的一粒沙子,…...
[嵌入式]回调函数在嵌入式中的作用
回调函数(Callback Function) 是一个被作为参数传递给另一个函数,并在特定时机被自动调用的函数。简单理解:你告诉系统 “当 XX 事件发生时,帮我执行这个函数”,这个函数就是回调函数。核心作用(…...
扶梯安全开关硬件抽象库:轻量级嵌入式状态识别方案
1. 项目概述EscalatorSwitch 是一个面向自动扶梯安全控制场景的轻量级嵌入式硬件抽象库,其核心定位并非通用IO驱动,而是针对电梯/扶梯行业特有的“扶梯运行状态切换开关”(Escalator Switch)这一专用机电装置提供标准化、可复用的…...
