码迷,mamicode.com
首页 > 其他好文 > 详细

SliceOpr切片常用操作

时间:2020-12-18 12:44:07      阅读:2      评论:0      收藏:0      [点我收藏+]

标签:tin   swt   问题   item   string   contain   插入   ice   slice   

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
}

SliceOpr切片常用操作

标签:tin   swt   问题   item   string   contain   插入   ice   slice   

原文地址:https://www.cnblogs.com/maomaomaoge/p/14128822.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!