广告
返回顶部
首页 > 资讯 > 精选 >go语言如何从切片中删除元素
  • 228
分享到

go语言如何从切片中删除元素

2023-07-04 20:07:30 228人浏览 八月长安
摘要

这篇文章主要介绍“Go语言如何从切片中删除元素”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“go语言如何从切片中删除元素”文章能帮助大家解决问题。删除方法:1、对切片进行截取来删除指定元素,语法“a

这篇文章主要介绍“Go语言如何从切片中删除元素”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“go语言如何从切片中删除元素”文章能帮助大家解决问题。

删除方法:1、对切片进行截取来删除指定元素,语法“append(a[:i], a[i+1:]...)”。2、创建一个新切片,将要删除的元素过滤掉后赋值给新切片。3、利用一个下标index,记录下一个有效元素应该在的位置;遍历所有元素,当遇到有效元素,将其移动到 index且index加一;最终index的位置就是所有有效元素的下一个位置,最后做一个截取即可。

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/slicegoos: windowsgoarch: amd64pkg: main/slicecpu: Intel(R) Core(TM) i7-9700 CPU @ 3.00GHzBenchmarkDeleteSlice1-8         17466486                65.07 ns/opBenchmarkDeleteSlice2-8         14897282                85.22 ns/opBenchmarkDeleteSlice3-8         21952129                50.78 ns/opBenchmarkDeleteSlice4-8         22176390                54.68 ns/opPASSok      main/slice      5.427s

原切片长度为 100:

BenchmarkDeleteSlice1-8          1652146               762.1 ns/opBenchmarkDeleteSlice2-8          2124237               578.4 ns/opBenchmarkDeleteSlice3-8          3161318               359.9 ns/opBenchmarkDeleteSlice4-8          2714158               423.7 ns/op

原切片长度为 1000:

BenchmarkDeleteSlice1-8            56067             21915 ns/opBenchmarkDeleteSlice2-8           258662              5007 ns/opBenchmarkDeleteSlice3-8           432049              2724 ns/opBenchmarkDeleteSlice4-8           325194              3615 ns/op

关于“go语言如何从切片中删除元素”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注编程网精选频道,小编每天都会为大家更新不同的知识点。

--结束END--

本文标题: go语言如何从切片中删除元素

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

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

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

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

下载Word文档
猜你喜欢
  • go语言如何从切片中删除元素
    这篇文章主要介绍“go语言如何从切片中删除元素”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“go语言如何从切片中删除元素”文章能帮助大家解决问题。删除方法:1、对切片进行截取来删除指定元素,语法“a...
    99+
    2023-07-04
  • go语言中切片如何增删元素
    这篇“go语言中切片如何增删元素”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“go语言中切片如何增删元素”文章吧。go语言中...
    99+
    2023-07-05
  • 使用go语言怎么在切片中删除元素
    今天就跟大家聊聊有关使用go语言怎么在切片中删除元素,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。Go语言从切片中删除元素Go语言并没有对删除切片元素提供专用的语法或者接口,需要使用...
    99+
    2023-06-15
  • go语言中切片如何加元素
    这篇文章主要介绍“go语言中切片如何加元素”,在日常操作中,相信很多人在go语言中切片如何加元素问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”go语言中切片如何加元素”的疑惑有所帮助!接下来,请跟着小编一起来...
    99+
    2023-07-05
  • go语言中list如何删除元素
    这篇文章主要介绍“go语言中list如何删除元素”,在日常操作中,相信很多人在go语言中list如何删除元素问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”go语言中list如何删除元素”的疑惑有所帮助!接下来...
    99+
    2023-07-05
  • go语言slice如何删除元素
    小编给大家分享一下go语言slice如何删除元素,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!go语言slice删除元素的方法:首先通过“func main() {...}”方法删除单个元素或批量删除元素;然后将删除点前后...
    99+
    2023-06-14
  • Go语言中如何删除数组元素
    这篇文章主要介绍“Go语言中如何删除数组元素”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Go语言中如何删除数组元素”文章能帮助大家解决问题。如果我们想要删除数组中的一个元素,Go语言提供了一个内置...
    99+
    2023-07-05
  • go语言如何删除数组元素
    小编给大家分享一下go语言如何删除数组元素,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!在go语言中,可以利用“Slice(切片)”追加元素的特性完成元素的删除操作,通过内建函数append()实现对单个元素以及元素片段的...
    99+
    2023-06-14
  • 怎么用go语言删除map中的元素
    本篇文章和大家了解一下怎么用go语言删除map中的元素。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。go语言删除map元素的方法:1、使用delete()函数从map中删除键值对,语法“delete(map, 键)”;2...
    99+
    2023-06-15
  • Go语言append切片添加元素的实现
    Go语言的内建函数 append() 可以为切片动态添加元素,代码如下所示: var a []int a = append(a, 1) // 追加1个元素 a = append(a,...
    99+
    2023-05-14
    Go语言 切片添加元素 Go语言append切片添加元素
  • Go语言map元素的删除和清空
    Go语言提供了一个内置函数 delete(),用于删除容器内的元素,下面我们简单介绍一下如何用 delete() 函数删除 map 内的元素。 使用 delete() 函数从 map...
    99+
    2023-05-16
    Go map元素删除 Go map元素清空
  • Go语言append切片添加元素怎么实现
    这篇“Go语言append切片添加元素怎么实现”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Go语言append切片添加元素...
    99+
    2023-07-05
  • 怎么使用Go语言删除链表元素
    这篇“怎么使用Go语言删除链表元素”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“怎么使用Go语言删除链表元素”文章吧。定义链...
    99+
    2023-07-06
  • 详解Go语言中删除数组元素的方法
    在Go语言中,数组是一种重要的数据类型。它与其他语言的数组一样,是一组相同类型的数据组成,可以通过一个索引来访问数组中的元素。在某些情况下,我们需要从一个数组中删除元素,本文将会介绍在Go语言中如何删除数组中的元素。如果我们想要删除数组中的...
    99+
    2023-05-14
    go语言 Golang 数组
  • javascript如何从set中删除元素
    小编给大家分享一下javascript如何从set中删除元素,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧! 删除元素的方法:1、使用delete(),...
    99+
    2022-10-19
  • c语言如何删除数组中的元素
    在C语言中,数组的长度是固定的,无法直接删除元素。但是可以通过移动元素的方式来实现删除元素的效果。一种常见的方法是将要删除的元素后面...
    99+
    2023-10-10
    c语言
  • Vuejs如何从数组中删除元素
    这篇文章主要介绍“Vuejs如何从数组中删除元素”,在日常操作中,相信很多人在Vuejs如何从数组中删除元素问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Vuejs如何从数组中删除元素”的疑惑有所帮助!接下来...
    99+
    2023-07-05
  • 总结Golang中删除切片元素的常用方法
    在Golang中,切片是一种非常常用的数据类型。在进行数据处理时,我们常常会遇到需要删除切片中某些元素的情况。本文将介绍Golang中常用的删除切片元素的方法。一、使用append函数删除切片元素在Golang中,使用append函数可以对...
    99+
    2023-05-14
  • 在Golang中如何从列表中删除元素
    Golang是一种面向对象的编程语言,它支持一些特殊的数据结构,如列表。当我们使用列表时,有时候需要从列表中删除某些元素。本文将介绍如何在Golang中从列表中删除元素。列表在Golang中,列表可以使用容器包中的list进行创建和使用。具...
    99+
    2023-05-14
  • Golang中删除切片元素的常用方法有哪些
    这篇文章主要介绍“Golang中删除切片元素的常用方法有哪些”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Golang中删除切片元素的常用方法有哪些”文章能帮助大家解决问题。一、使用append函数...
    99+
    2023-07-05
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作