合并两个整型切片,返回没有重复元素的切片,有两种去重策略

1. 通过双重循环来过滤重复元素(时间换空间)

// 通过两重循环过滤重复元素
func RemoveRepByLoop(slc []int) []int {
result := []int{} // 存放结果
for i := range slc{
flag := true
for j := range result{
if slc[i] == result[j] {
flag = false // 存在重复元素,标识为false
break
}
}
if flag { // 标识为false,不添加进结果
result = append(result, slc[i])
}
}
return result
}

2. 通过字典来过滤(空间换时间)

// 通过map主键唯一的特性过滤重复元素
func RemoveRepByMap(slc []int) []int {
result := []int{}
tempMap := map[int]byte{} // 存放不重复主键
for _, e := range slc{
l := len(tempMap)
tempMap[e] = 0
if len(tempMap) != l{ // 加入map后,map长度变化,则元素不重复
result = append(result, e)
}
}
return result
}

ps : 这里为了节省内存,使用map[int]byte。 因为map的value并没有用到,所以什么类型都可以。

效率第一,如果节省计算时间,则可以采用如下方式

// 元素去重
func RemoveRep(slc []int) []int{
if len(slc) < 1024 {
// 切片长度小于1024的时候,循环来过滤
return RemoveRepByLoop(slc)
}else{
// 大于的时候,通过map来过滤
return RemoveRepByMap(slc)
}
}

ps: 1024 这个数字不是特别精准,我是使用go test 的基准测试,手工的比较的。大约在这个数量超上,使用map方式的速度要快,小于这个数量级后,loop方式要快,而且省内存。

原文:https://blog.csdn.net/qq_27068845/article/details/77407358

Golang数组去重&切片去重的更多相关文章

  1. Golang 数组、切片、映射

    定义数组 var arr1 [5]int //整型类型 fmt.Println(arr1) //[0 0 0 0 0] //赋值 arr1 = [5]int{1, 2, 3, 4, 5} fmt.Pr ...

  2. golang数组与切片

    golang中坑的慢慢踩! golang中的数组是值类型,函数调用是传入的是数组的拷贝,如果想改变数组的值,可考虑使用指针数组,即函数调用时传入数组的地址 golang中的切片是引用类型,但是在函数中 ...

  3. golang 数组、切片、map

    一.数组(类似python的list) 数组的长度一旦定义了就不能动态增长.并且存储的数据类型必须相同. 创建方法: var 数组名 [长度]数据类型 例如: package main import ...

  4. Golang: 数组和切片

    数组 同其他语言一样,数组是一些相同类型的元素的集合.数组声明 数组的类型为 n[T],其中 n 表示数组中元素的个数,T 表示数组中元素的类型.数组元素的个数 n 也是数组类型的一部分 packag ...

  5. Golang数组和切片的区别

    大纲 数组是固定大小 切片不是动态数组,可以扩容 区别 定义方式不一样 初始化方法不一样 package main import "fmt" func main() { // -- ...

  6. Golang 实现 set 集合,变相实现 切片去重、排序 功能

    Java 中的集合(set)去重很方便,PHP 中的数组值去重,就更加方便,一个函数搞定:array_unique(),Golang 中就比较苦逼了,官方没有提供对“切片去重”的功能,而项目中,又经常 ...

  7. 前端总结·基础篇·JS(二)数组深拷贝、去重以及字符串反序和数组(Array)

    目录 这是<前端总结·基础篇·JS>系列的第二篇,主要总结一下JS数组的使用.技巧以及常用方法. 一.数组使用 1.1 定义数组 1.2 使用数组 1.3 类型检测 二.常用技巧 2.1 ...

  8. JS 两个对象数组合并并去重

    JS两个对象数组合并并去重 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> ...

  9. php 数组元素快速去重

    1.使用array_unique方法进行去重 对数组元素进行去重,我们一般会使用array_unique方法,使用这个方法可以把数组中的元素去重. <?php $arr = array(,,,, ...

  10. PHP数组合并和去重的函数有哪些

    PHP数组合并和去重的函数有哪些 一.总结 一句话总结:合并:array_merge() array_merge_recursive() +号:去重:array_flip() array_unique ...

随机推荐

  1. Qt编写地图综合应用34-生成区域轮廓图

    一.前言 区域轮廓图的前提是,如何拿到这些轮廓的js文件,网络上其实能够找到各省市的轮廓的json数据,这些json数据对应内容是各种边界的一些类似 @@CGIUCACAAAAA@Q@ 字符的东西,每 ...

  2. IM跨平台技术学习(十二):万字长文详解QQ Linux端实时音视频背后的跨平台实践

    本文由QQ音视频团队贺坤分享原题"Linux QQ能打语音视频了!一文详解背后技术实现!",下文进行了排版和内容优化等. 1.引言 2024年6月6日,QQ For Linux 3 ...

  3. 得物自研客服IM中收发聊天消息背后的技术逻辑和思考实现

    本文由得物技术WWQ分享,原题"客服发送一条消息背后的技术和思",本文有修订和改动. 1.引言 在企业IM客服场景中,客服发送一条消息的背后,需要考虑网络通信.前端展示.后端存储以 ...

  4. IM扫码登录技术专题(三):通俗易懂,IM扫码登录功能详细原理一篇就够

    本文引用了作者"大古同学"的"二维码扫码登录是什么原理"一文的主要内容,为了更好的理解和阅读,即时通讯网收录时有修订和改动,感谢原作者的分享. 1.引言 自从微 ...

  5. 【Windows】终端配置代理

    Windows cmd 设置代理 设置 HTTP 代理: set http_proxy=http://127.0.0.1:7890 & set https_proxy=http://127.0 ...

  6. C++之OpenCV入门到提高007:调整图像亮度和对比度

    一.介绍 今天是这个系列<C++之 Opencv 入门到提高>的第七篇文章.这篇文章也不难,介绍如何调整图像的亮度.图像本质上也是数据,既然是数据,我们就可以针对图像的每个像素进行增加或者 ...

  7. C Primer Plus 第6版 第六章 编程练习参考答案

    编译环境VS Code+WSL GCC 源码请到文末下载 .注意:本章部分题目中用到了math.h 用gcc编译时加上-lm参数. /*第1题*************************/ #i ...

  8. C# 开发电子印章制作工具 -- 附下载程序

    前言 本人在业余时间,开发了一款电子印章制作软件.印章制作软件看似简单,其实不然. 比如对椭圆形印章而言,要求公司名称中的每一个字间隔相等,要求字的方向与椭圆曲线垂直. 要满足这些条件,需要复杂的计算 ...

  9. 回顾 2024 年 12 个月的C#/.NET/.NET Core优秀项目和框架简报

    前言 今天咱们一起来回顾一下 2024 年 12 个月的C#/.NET/.NET Core优秀项目和框架简报,看看是否有适合你学习和参考的项目和框架. 简报初衷 公众号每月定期推广和分享的C#/.NE ...

  10. java中属性和变量的区别与final和抽象类

    属性和变量的区别 变量必须要有初始值: 属性可以没有初始值: 变量的范围只在当前大括号内有效: 属性是对象在哪里使用就在哪里有效: 属性的作用范围要比变量的大一些 属性和变量 public class ...