golang 实现删除切片特定下标元素的方法

  • 要求一:能够实现删除操作就可以。

  • 要求二:考虑使用比较高性能的实现。

  • 要求三:改造为泛型方法

  • 要求四:支持缩容,并旦设计缩容机制。

go 复制代码
package main

import "fmt"

func DeleteAt[T any](slice []T, index int) []T {
	if index < 0 || index > len(slice)-1 {
		panic("index out of range")
	}
	// 前移
	copy(slice[index:], slice[index+1:])
	slice = slice[:len(slice)-1]

	// 缩容
	if cap(slice) >= len(slice)*2 {
		newSlice := make([]T, len(slice))
		copy(newSlice, slice)
		return newSlice
	}
	return slice
}

func main() {
	a := []int{1, 2, 3}
	fmt.Println(DeleteAt(a, 2))
}

高性能操作直接在原切片对元素进行前移,然后截取;如果cap超过len的2倍,则创建一个起始长度容量更小的切片赋值

相关推荐
驰羽6 分钟前
[GO]GORM 常用 Tag 速查手册
开发语言·后端·golang
AntBlack44 分钟前
虽迟但到 :盘一盘 SpringAI 现在发展得怎么样了?
后端·spring·openai
ss2732 小时前
手写Spring第4弹: Spring框架进化论:15年技术变迁:从XML配置到响应式编程的演进之路
xml·java·开发语言·后端·spring
舒一笑2 小时前
🚀 PandaCoder 2.0.0 - ES DSL Monitor & SQL Monitor 震撼发布!
后端·ai编程·intellij idea
Java中文社群2 小时前
服务器被攻击!原因竟然是他?真没想到...
java·后端
helloworddm3 小时前
Orleans 流系统握手机制时序图
后端·c#
开心-开心急了4 小时前
Flask入门教程——李辉 第三章 关键知识梳理
后端·python·flask
Code blocks5 小时前
GB28181视频服务wvp部署(一)
java·spring boot·后端
我命由我123455 小时前
Spring Boot - Spring Boot 静态资源延迟响应(使用拦截器、使用过滤器、使用 ResourceResolver)
java·spring boot·后端·spring·java-ee·intellij-idea·intellij idea
华仔啊6 小时前
3 分钟让你彻底搞懂 Spring 观察者和发布者模式的本质区别
java·后端