【Golang】使用泛型对数组进行去重
背景:
要求写一个方法,返回去重后的数组。数组的类型可能是int64,也可能是string,或是其他类型。
如果区分类型的话,每增加一个新的类型都需要重新写一个方法。
示例代码:
//对int64数组进行去重
func DeDuplicateInt64Slice(array []int64) []int64 {mp := make(map[int64]struct{})idx := 0for _, value := range array {if _, ok := mp[value]; ok {continue}array[idx] = valueidx = idx + 1mp[value] = struct{}{}}return array[:idx]
}//对string数组进行去重
func DeDuplicateStringSlice(array []string) []string {mp := make(map[string]struct{})idx := 0for _, value := range array {if _, ok := mp[value]; ok {continue}array[idx] = valueidx = idx + 1mp[value] = struct{}{}}return array[:idx]
}
使用泛型实现后的代码
//对数组去重
func DeDuplicateSlice[T any](array []T) []T {mp := make(map[any]struct{})idx := 0for _, value := range array {if _, ok := mp[value]; ok {continue}array[idx] = valueidx = idx + 1mp[value] = struct{}{}}return array[:idx]
}
其中:
T 是类型参数,在函数体里的用法跟其他数据类型(如int一样)
any 是类型约束,这里的any可以是任何类型,也就是没有约束
// any is an alias for interface{} and is equivalent to interface{} in all ways.
type any = interface{}
相关文章:
【Golang】使用泛型对数组进行去重
背景: 要求写一个方法,返回去重后的数组。数组的类型可能是int64,也可能是string,或是其他类型。 如果区分类型的话,每增加一个新的类型都需要重新写一个方法。 示例代码: //对int64数组进行去重 func DeD…...
Ps:画笔工具的基本操作
画笔工具 Brush Tool是 Ps 中最常用的工具,广泛地用于绘画与修饰工作。 虽然多数操作可在画笔工具的工具选项栏中选择执行,但是如果能记住相应的快捷键可大大提高工作效率。 熟练掌握画笔工具的操作对于使用其他工具也非常有益,因为 Ps 中许多…...
【Apache Doris】一键实现万表MySQL整库同步 | 快速体验
【Apache Doris】一键实现万表MySQL整库同步 | 快速体验) 一、 环境信息1.1 硬件信息1.2 软件信息 二、 流程介绍三、 前提概要3.1 安装部署3.2 JAR包准备3.2.1 数据源3.2.2 目标源 3.3 脚本模版 四、快速体验五、常见问题5.1 Mysql通信异常5.2 MySQL无Key同步异常5…...
35.逻辑运算符
目录 一.什么是逻辑运算符 二.C语言中的逻辑运算符 三.逻辑表达式 三.视频教程 一.什么是逻辑运算符 同时对俩个或者俩个以上的表达式进行判断的运算符叫做逻辑运算符。 举例:比如去网吧上网,只有年满十八周岁并且带身份证才可以上网。在C语言中如果…...
ASP.NET Core 启用CORS
浏览器的安全阻止一个域的本地页面请求另外不同域的本地页面,这个限制叫同源策略,这个安全特性用来阻止恶意站点从别的网站读取数据 例如假如我有一个页面叫A.html https://foo.example/A.html 现在页面A.html有一个ajax代码尝试读取B.html的HTML的源…...
io.lettuce.core.RedisCommandExecutionException
io.lettuce.core.RedisCommandExecutionException: ERR invalid password ERR invalid password-CSDN博客 io.lettuce.core.RedisCommandExecutionException /** Copyright 2011-2022 the original author or authors.** Licensed under the Apache License, Version 2.0 (the…...
vue3 导出数据为 excel 文件
文章目录 安装插件封装组件 -- Export2Excel.js多表封装界面使用 -- 数据处理成二维数组更多 菜鸟最近做了一个需求,就是需要上传表单并识别,然后识别出来的内容要可以修改,然后想的就是识别内容变成 form 表单,所以并没有使用 Sp…...
PyQt6简介
锋哥原创的PyQt6视频教程: 2024版 PyQt6 Python桌面开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili2024版 PyQt6 Python桌面开发 视频教程(无废话版) 玩命更新中~共计12条视频,包括:2024版 PyQt6 Python桌面开发 视频教程(无废话版…...
某60区块链安全之未初始化的存储指针实战二学习记录
系列文章目录 文章目录 系列文章目录未初始化的存储指针实战二实验目的实验环境实验工具实验原理实验内容实验过程EXP利用 未初始化的存储指针实战二 实验目的 学会使用python3的web3模块 学会分析以太坊智能合约未初始化的存储指针漏洞 找到合约漏洞进行分析并形成利用 实验…...
软件工程第十二周
软件作坊、软件危机、软件过程控制、重型控制、敏捷、DevOps 这些术语概括了软件开发历史和实践中的几个重要概念和阶段。让我们逐一解析它们: 软件作坊(Software Craftsmanship):这是软件开发的早期模式,强调个人技能…...
electron 问题记录
23年11月24 electron项目npm install 卡在一个地方不动 原因:主要是 install electron 会卡住 解决方法: # 先解决install electron卡死 npm install -g cnpm --registryhttps://registry.npmmirror.com cnpm install electron# 然后下载其他依赖 np…...
nodejs+vue+python+PHP+微信小程序-留学信息查询系统的设计与实现-安卓-计算机毕业设计
1、用户模块: 1)登录:用户注册登录账号。 2)留学查询模块:查询学校的入学申请条件、申请日期、政策变动等。 3)院校排名:查询国外各院校的实力排名。 4)测试功能:通过入学…...
JWT和Token之间的区别
✅作者简介:大家好,我是Leo,热爱Java后端开发者,一个想要与大家共同进步的男人😉😉 🍎个人主页:Leo的博客 💞当前专栏:每天一个知识点 ✨特色专栏:…...
UserRole
Qt::UserRole 是 Qt::ItemDataRole 枚举中的一个成员,用于表示自定义数据角色(Data Role)的起始值。 在 Qt 中,Qt::ItemDataRole 枚举用于标识项(Item)中不同类型的数据。这些数据角色包括 Qt::DisplayRol…...
java学习part10 this
90-面向对象(进阶)-关键字this调用属性、方法、构造器_哔哩哔哩_bilibili 1.java的this java的this性质类似cpp的this, 但它是一种引用,所以用 this. xxx来调用。 this代表当前的类的实例,所以必须和某个对象结合起来使用,不能…...
Spring Cloud + Nacos 项目启动失败【No spring.config.import property has been defined】
在 Spring Cloud 项目使用 bootstrap.yaml 配置文件,添加 nacos 等相关参数配置,启动服务抛入如下异常: org.springframework.cloud.commons.ConfigDataMissingEnvironmentPostProcessor$ImportException: No spring.config.import set ... …...
CANopen协议【SDO】
SDO: SDO是读写单个寄存器。主要用于配置伺服驱动器参数。 1 收发功能: //public unsafe struct VCI_CAN_OBJ //CAN数据帧 【单帧对象】//{// public uint ID;// 帧ID。 【11bit】数据右对齐。 详情请参照: 《8.附件1࿱…...
9-什么是迭代器,生成器,装饰器、django的信号用过吗?如何用,干过什么、什么是深拷贝,什么是浅拷贝,如何使用、slice操作符和list构造函数
1 什么是迭代器,生成器,装饰器 2 django的信号用过吗?如何用,干过什么 3 什么是深拷贝,什么是浅拷贝,如何使用 3.1 浅拷贝 3.2 深拷贝 3.3 扩展(slice操作符和list构造函数) 1 什么是迭代器,生成…...
RabbitMQ之发送者(生产者)可靠性
文章目录 前言一、生产者重试机制二、生产者确认机制实现生产者确认(1)定义ReturnCallback(2)定义ConfirmCallback 总结 前言 生产者重试机制、生产者确认机制。 一、生产者重试机制 问题:生产者发送消息时࿰…...
乐得瑞LDR6020 VR串流线方案:实现同时充电传输视频信号
VR(Virtual Reality),俗称虚拟现实技术,是一项具有巨大潜力的技术创新,正在以惊人的速度改变我们的生活方式和体验,利用专门设计的设备,如头戴式显示器(VR头盔)、手柄、定…...
BiliDownloader:一站式智能下载B站视频的高效解决方案
BiliDownloader:一站式智能下载B站视频的高效解决方案 【免费下载链接】BiliDownloader BiliDownloader是一款界面精简,操作简单且高速下载的b站下载器 项目地址: https://gitcode.com/gh_mirrors/bi/BiliDownloader 在数字化学习与内容消费的时代…...
云数据库(RDS)与自建数据库对比
云数据库(RDS)与自建数据库对比:如何选择更适合的方案? 在数字化转型的浪潮中,数据库作为企业核心数据存储与管理的基石,其选择至关重要。云数据库(RDS)和自建数据库是两种主流方案…...
MySQL如何通过MVCC提升并发读性能_理解undo log版本链
快照读不用锁靠Undo Log版本链实现,SELECT通过ReadView沿DB_ROLL_PTR链追溯可见版本;ReadView用m_up_limit_id、m_low_limit_id和m_creator_trx_id三值判断版本可见性。快照读为什么不用锁?靠的是Undo Log版本链MySQL的SELECT不加锁ÿ…...
设计模式(c++)-结构型模式-适配器模式
设计模式(c)-结构型模式-适配器模式 一、适配器模式概述 适配器模式是一种结构型设计模式,它充当两个不兼容接口之间的桥梁,允许原本由于接口不匹配而无法一起工作的类能够协同工作。 核心思想:是将一个类的接口转换成客户期望的另一个接口。…...
Jimeng AI Studio实战:VLOOKUP函数在大数据处理中的应用
Jimeng AI Studio实战:VLOOKUP函数在大数据处理中的应用 1. 场景痛点:当Excel遇到大数据 做数据分析的朋友应该都深有体会:Excel里的VLOOKUP函数在小数据量时很好用,但一旦数据量大了,问题就来了。 我最近就遇到了这…...
MCP协议火了:我用它5分钟就打通了所有AI工具的上下文
说实话,我之前一直在头疼一个问题:不同的AI工具之间上下文完全不通,每次换个工具都得重新粘贴一遍历史对话,太麻烦了。 直到上周接触到MCP(Model Context Protocol)协议,才发现这东西简直是神器…...
YL4056H-datasheet-V1.6版本:33V耐压线性充电芯片技术详解
这份解析基于 V1.6 (2026/03/19) 版本的数据手册,重点解析其在高耐压设计、热管理及多型号适配方面的技术细节。1. 核心规格概览YL4056H 是一款专为单节锂电池设计的线性充电管理芯片,其最大的市场定位优势在于输入耐压能力。核心参数 规格数值 备注生产…...
如何用 Fullscreen API 监听全屏切换状态并调整界面 UI
可通过监听 fullscreenchange 事件并检查 document.fullscreenElement 来准确判断全屏状态,据此动态调整UI;全屏API须在用户手势中调用,退出时用 document.exitFullscreen() 并处理 Promise;CSS 可配合 :fullscreen 伪类和 class …...
MySQL触发器在主从架构下的表现_MySQL触发器主从同步策略
触发器在从库默认不执行,主从复制仅同步binlog事件而非触发器逻辑,从库需手动创建且受read_only和DEFINER权限限制;可靠替代方案是应用层双写、binlog监听或定时对账。触发器在从库上默认不执行MySQL主从复制只同步 binlog 事件,不…...
【Autosar MCAL实战】S32K14x WDG模块:从硬件原理到软件喂狗策略的深度解析
1. 看门狗基础与S32K14x硬件架构 在嵌入式系统中,看门狗(Watchdog Timer, WDT)就像一位严格的监工,时刻监督着程序的运行状态。当我在开发基于S32K146的电池管理系统时,深刻体会到这个"电子监工"的重要性——…...
