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倍,则创建一个起始长度容量更小的切片赋值

相关推荐
e***71674 分钟前
Spring Boot项目接收前端参数的11种方式
前端·spring boot·后端
程序猿小蒜6 分钟前
基于springboot的的学生干部管理系统开发与设计
java·前端·spring boot·后端·spring
q***563833 分钟前
Spring容器初始化扩展点:ApplicationContextInitializer
java·后端·spring
菜鸟‍1 小时前
【后端学习】MySQL数据库
数据库·后端·学习·mysql
Codebee1 小时前
30 分钟落地全栈交互:OneCode CLI+SVG 排课表实战
后端
TechTrek2 小时前
Spring Boot 4.0正式发布了
java·spring boot·后端·spring boot 4.0
飞梦工作室2 小时前
企业级 Spring Boot 邮件系统开发指南:从基础到高可用架构设计
java·spring boot·后端
haiyu柠檬2 小时前
在Spring Boot中实现Azure的SSO+VUE3前端配置
java·spring boot·后端
q***72193 小时前
springBoot 和springCloud 版本对应关系
spring boot·后端·spring cloud
百***81273 小时前
【SpringBoot】SpringBoot中分页插件(PageHelper)的使用
java·spring boot·后端