SliceOpr切片常用操作
切片取值范围
切片的取值范围为了插入做准备
func TestTimeNowUnix(t *testing.T) {
var s []int
s = make([]int, 0)
s = append(s, 1, 2, 3, 4)
fmt.Println(s[1:2])
}
## 输出
[2]
结论
- 左边取值保留
- 右边取值减去一个
切片的插入
核心代码
var (
s []int
headItem int // 头部需要插入的元素
)
s = make([]int, 0)
s = append(s, 1, 2, 3, 4)
l := s[len(s) - 1]
// 下面就是核心代码 需要进行扩容
headItem = 0
copy(s[1:], s[0:])
s[0] = headItem
s = append(s, l)
fmt.Println(s, cap(s))
毛哥封装
具体形式 在增加swtich的类型就ok
// item: 需要插入的元素
// pos: 位置
// slice: 切片
func SliceInsertInd(item interface{},pos int, slice interface{}) interface{} {
var (
result interface{}
)
switch slice.(type) {
case []int:
s := slice.([]int)
if len(s) == pos {
// 由于copy扩容问题 尾部只能append
result = append(s, item.(int))
return result
}
l := s[len(s) - 1]
headItem := item.(int)
copy(s[pos+1:], s[pos:])
s[pos] = headItem
s = append(s, l)
result = s
case []string:
s := slice.([]string)
if len(s) == pos {
// 由于copy扩容问题 尾部只能append
result = append(s, item.(string))
return result
}
l := s[len(s) - 1]
headItem := item.(string)
copy(s[pos+1:], s[pos:])
s[pos] = headItem
s = append(s, l)
result = s
}
return result
}