iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > GO >Golang切片删除指定元素的方法有哪些
  • 197
分享到

Golang切片删除指定元素的方法有哪些

2023-07-02 14:07:32 197人浏览 八月长安
摘要

这篇文章主要介绍了golang切片删除指定元素的方法有哪些的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Golang切片删除指定元素的方法有哪些文章都会有所收获,下面我们一起来看看吧。前言Go 并没有提供删除切

这篇文章主要介绍了golang切片删除指定元素的方法有哪些的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Golang切片删除指定元素的方法有哪些文章都会有所收获,下面我们一起来看看吧。

    前言

    Go 并没有提供删除切片元素专用的语法或函数,需要使用切片本身的特性来删除元素。

    删除切片指定元素一般有如下几种方法,本文以 []int 为例给出具体实现。

    1.截取法(修改原切片)

    这里利用对 slice 的截取删除指定元素。注意删除时,后面的元素会前移,所以下标 i 应该左移一位。

    // DeleteSlice1 删除指定元素。func DeleteSlice1(a []int, elem int) []int {for i := 0; i < len(a); i++ {if a[i] == elem {a = append(a[:i], a[i+1:]...)i--}}return a}

    2.拷贝法(不改原切片)

    这种方法最容易理解,重新使用一个 slice,将要删除的元素过滤掉。缺点是需要开辟另一个 slice 的空间,优点是容易理解,而且不会修改原 slice。

    // DeleteSlice2 删除指定元素。func DeleteSlice2(a []int, elem int) []int {tmp := make([]int, 0, len(a))for _, v := range a {if v != elem {tmp = append(tmp, v)}}return tmp}

    3.移位法(修改原切片)

    3.1 方式一

    利用一个下标 index,记录下一个有效元素应该在的位置。遍历所有元素,当遇到有效元素,将其移动到 index 且 index 加一。最终 index 的位置就是所有有效元素的下一个位置,最后做一个截取就行了。这种方法会修改原来的 slice。

    该方法可以看成对第一种方法截取法的改进,因为每次指需移动一个元素,性能更加。

    // DeleteSlice3 删除指定元素。func DeleteSlice3(a []int, elem int) []int {j := 0for _, v := range a {if v != elem {a[j] = vj++}}return a[:j]}

    3.2 方式二

    创建了一个 slice,但是共用原始 slice 的底层数组。这样也不需要额外分配内存空间,直接在原 slice 上进行修改。

    // DeleteSlice4 删除指定元素。func DeleteSlice4(a []int, elem int) []int {tgt := a[:0]for _, v := range a {if v != elem {tgt = append(tgt, v)}}return tgt}

    4.性能对比

    假设我们的切片有 0 和 1,我们要删除所有的 0。

    这里分别对长度为 10、100、1000 的切片进行测试,来上下上面四种实现的性能差异。

    生成切片函数如下:

    func getSlice(n int) []int {a := make([]int, 0, n)for i := 0; i < n; i++ {if i%2 == 0 {a = append(a, 0)continue}a = append(a, 1)}return a}

    基准测试代码如下:

    func BenchmarkDeleteSlice1(b *testing.B) {for i := 0; i < b.N; i++ {_ = DeleteSlice1(getSlice(10), 0)}}func BenchmarkDeleteSlice2(b *testing.B) {for i := 0; i < b.N; i++ {_ = DeleteSlice2(getSlice(10), 0)}}func BenchmarkDeleteSlice3(b *testing.B) {for i := 0; i < b.N; i++ {_ = DeleteSlice3(getSlice(10), 0)}}func BenchmarkDeleteSlice4(b *testing.B) {for i := 0; i < b.N; i++ {_ = DeleteSlice4(getSlice(10), 0)}}

    测试结果如下:

    原切片长度为 10:

    go test -bench=. main/slice
    goos: windows
    goarch: amd64
    pkg: main/slice
    cpu: Intel(R) Core(TM) i7-9700 CPU @ 3.00GHz
    BenchmarkDeleteSlice1-8         17466486                65.07 ns/op
    BenchmarkDeleteSlice2-8         14897282                85.22 ns/op
    BenchmarkDeleteSlice3-8         21952129                50.78 ns/op
    BenchmarkDeleteSlice4-8         22176390                54.68 ns/op
    PASS
    ok      main/slice      5.427s

    原切片长度为 100:

    BenchmarkDeleteSlice1-8          1652146               762.1 ns/op
    BenchmarkDeleteSlice2-8          2124237               578.4 ns/op
    BenchmarkDeleteSlice3-8          3161318               359.9 ns/op
    BenchmarkDeleteSlice4-8          2714158               423.7 ns/op

    原切片长度为 1000:

    BenchmarkDeleteSlice1-8            56067             21915 ns/op
    BenchmarkDeleteSlice2-8           258662              5007 ns/op
    BenchmarkDeleteSlice3-8           432049              2724 ns/op
    BenchmarkDeleteSlice4-8           325194              3615 ns/op

    关于“Golang切片删除指定元素的方法有哪些”这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对“Golang切片删除指定元素的方法有哪些”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注编程网GO频道。

    您可能感兴趣的文档:

    --结束END--

    本文标题: Golang切片删除指定元素的方法有哪些

    本文链接: https://www.lsjlt.com/news/342291.html(转载时请注明来源链接)

    有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

    本篇文章演示代码以及资料文档资料下载

    下载Word文档到电脑,方便收藏和打印~

    下载Word文档
    猜你喜欢
    • Golang切片删除指定元素的方法有哪些
      这篇文章主要介绍了Golang切片删除指定元素的方法有哪些的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Golang切片删除指定元素的方法有哪些文章都会有所收获,下面我们一起来看看吧。前言Go 并没有提供删除切...
      99+
      2023-07-02
    • golang删除切片元素的方法有哪些
      这篇文章主要介绍“golang删除切片元素的方法有哪些”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“golang删除切片元素的方法有哪些”文章能帮助大家解决问题。方法一:使用 append 函数删除...
      99+
      2023-07-05
    • Golang切片删除指定元素的三种方法对比
      目录前言1.截取法(修改原切片)2.拷贝法(不改原切片)3.移位法(修改原切片)3.1 方式一3.2 方式二4.性能对比5.小结前言 Go 并没有提供删除切片元素专用的语法或函数,需...
      99+
      2022-11-13
    • Golang中删除切片元素的常用方法有哪些
      这篇文章主要介绍“Golang中删除切片元素的常用方法有哪些”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Golang中删除切片元素的常用方法有哪些”文章能帮助大家解决问题。一、使用append函数...
      99+
      2023-07-05
    • 总结Golang中删除切片元素的常用方法
      在Golang中,切片是一种非常常用的数据类型。在进行数据处理时,我们常常会遇到需要删除切片中某些元素的情况。本文将介绍Golang中常用的删除切片元素的方法。一、使用append函数删除切片元素在Golang中,使用append函数可以对...
      99+
      2023-05-14
    • golang 删除切片的某个元素及剔除切片内的零值方式
      看代码吧~ func remove(slice []interface{}, elem interface{}) []interface{}{ if len(slice)...
      99+
      2022-11-12
    • python list删除元素的方法有哪些
      Python中删除列表元素的方法有以下几种:1. 使用`del`关键字```pythonmy_list = [1, 2, 3, 4,...
      99+
      2023-09-25
      Python
    • javascript中数组元素删除方法有哪些
      这篇文章主要讲解了“javascript中数组元素删除方法有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“javascript中数组元素删除方法有哪些”吧!delete方法:delete...
      99+
      2023-06-03
    • Python list列表删除元素的方法有哪些
      本篇内容主要讲解“Python list列表删除元素的方法有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Python list列表删除元素的方法有哪些”吧!del:根据索引值删除元素del...
      99+
      2023-06-25
    • Python删除列表中重复元素的方法有哪些
      这篇文章主要介绍了Python删除列表中重复元素的方法有哪些的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Python删除列表中重复元素的方法有哪些文章都会有所收获,下面我们一起来看看吧。直接遍历列表删除l1&...
      99+
      2023-07-05
    • Python字典删除键值对和元素的方法有哪些
      这篇文章主要介绍“Python字典删除键值对和元素的方法有哪些”,在日常操作中,相信很多人在Python字典删除键值对和元素的方法有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Python字典删除键值对...
      99+
      2023-06-21
    • 如何用PHP删除数组中的指定元素(三种方法)
      PHP是一种强大的服务器端脚本语言,它提供了许多实用的功能和方法。在PHP中,可以使用数组来存储和管理数据,但有时候需要对数组进行修改,比如删除特定的元素。在本文中,我将为大家介绍如何使用PHP删除数组中指定的元素。PHP删除数组元素的方法...
      99+
      2023-05-14
    • JAVA之String中删除指定字符方式的方法有哪些
      本篇内容主要讲解“JAVA之String中删除指定字符方式的方法有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“JAVA之String中删除指定字符方式的方法有哪些”吧!第一种方法通过循环从...
      99+
      2023-07-05
    • JS删除数组中某个元素的方式有哪些
      本篇内容主要讲解“JS删除数组中某个元素的方式有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“JS删除数组中某个元素的方式有哪些”吧!第一种:删除最后一个元素slice 删除 va...
      99+
      2023-07-05
    • js判断某个元素是否有指定的class名的方法有哪些
      这篇文章主要介绍“js判断某个元素是否有指定的class名的方法有哪些”,在日常操作中,相信很多人在js判断某个元素是否有指定的class名的方法有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操...
      99+
      2022-10-19
    • JS 中判断数组是否包含指定元素的方法有哪些
      这篇文章主要讲解了“JS 中判断数组是否包含指定元素的方法有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“JS 中判断数组是否包含指定元素的方法有哪些”...
      99+
      2022-10-19
    • PHP移除数组中最后一个元素的常用方法有哪些
      本篇内容介绍了“PHP移除数组中最后一个元素的常用方法有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!使用array_pop()函数ar...
      99+
      2023-07-05
    • 使用bash shell删除目录中的特定文件的方法有哪些
      本篇内容介绍了“使用bash shell删除目录中的特定文件的方法有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!我是一名Linux新用...
      99+
      2023-06-09
    软考高级职称资格查询
    编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
    • 官方手机版

    • 微信公众号

    • 商务合作