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

相关推荐
永远不会的CC2 小时前
浙江华昱欣实习(4月23日~ 4月19日)
后端·学习
直奔標竿2 小时前
Java开发者AI转型第二十五课!Spring AI 个人知识库实战(四)——RAG来源追溯落地,拒绝AI幻觉
java·开发语言·人工智能·spring boot·后端·spring
嘟嘟MD2 小时前
程序员副业 | 2026年4月复盘
后端·创业
时空系3 小时前
认识Rust——我的第一个程序 Rust中文编程
开发语言·后端·rust
DevilSeagull3 小时前
Windows 批处理 (Batch) 编程: 从入门到入土. (一) 基础概念与环境配置
开发语言·windows·后端·batch·语言
CAE虚拟与现实3 小时前
五一假期闲来无事,来个前段、后端的说明吧
前端·后端·vtk·three.js·前后端
0xDevNull3 小时前
Java泛型详解
java·开发语言·后端
yeeanna3 小时前
GO函数的特殊性
开发语言·后端·golang
时空系3 小时前
第6篇:数据容器——管理大量数据 Rust中文编程
开发语言·后端·rust
eLIN TECE4 小时前
Go基础之环境搭建
开发语言·后端·golang