zoukankan      html  css  js  c++  java
  • SliceOpr切片常用操作

    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
    }
    
  • 相关阅读:
    BigDecimal的一些用法
    java文件读写实例
    2017java文本文件操作(读写操作)
    java一些必会算法
    代码规范、如何写出好代码
    File available()方法
    Java当中的JVM
    分布式锁机制
    异常处理---抛与踹
    while eles
  • 原文地址:https://www.cnblogs.com/maomaomaoge/p/14128822.html
Copyright © 2011-2022 走看看