41 lines
921 B
Go
41 lines
921 B
Go
package slice
|
||
|
||
// Drop 从切片中删除指定数量的元素
|
||
// - start: 起始位置
|
||
// - n: 删除的元素数量
|
||
// - slice: 待删除元素的切片
|
||
//
|
||
// 关于 start 的取值:
|
||
// - 当 start < 0 时,start 将会从右至左计数,即 -1 表示最后一个元素,-2 表示倒数第二个元素,以此类推
|
||
func Drop[V any](start, n int, slice []V) []V {
|
||
var s = make([]V, len(slice))
|
||
copy(s, slice)
|
||
if start < 0 {
|
||
start = len(s) + start - n + 1
|
||
if start < 0 {
|
||
start = 0
|
||
}
|
||
}
|
||
|
||
end := start + n
|
||
if end > len(s) {
|
||
end = len(s)
|
||
}
|
||
|
||
return append(s[:start], s[end:]...)
|
||
}
|
||
|
||
// DropBy 从切片中删除指定的元素
|
||
// - slice: 待删除元素的切片
|
||
func DropBy[V any](slice []V, fn func(index int, value V) bool) []V {
|
||
var s = make([]V, len(slice))
|
||
copy(s, slice)
|
||
for i := 0; i < len(s); i++ {
|
||
if fn(i, s[i]) {
|
||
s = append(s[:i], s[i+1:]...)
|
||
i--
|
||
}
|
||
}
|
||
return s
|
||
}
|