SliceOpr切片常用操作

时间:2020-12-18 12:44:07   收藏:0   阅读:2

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
}
评论(0
© 2014 mamicode.com 版权所有 京ICP备13008772号-2  联系我们:gaon5@hotmail.com
迷上了代码!