• 26_append 函数的使用


    append 函数的使用
    1.内置函数append用来将元素追加到slice的后面

    2.如果使用append追加时,原底层数组容量够时,还会使用原来的底层数组,并把新的元素复制到原数组的后面,
      如果slice的容量不够时,就把原来的数组扩展一倍,并把原来的slice数组复制到新的扩充数组中,然后再
      将新元素追加到数组的后面.

    3.每次数组容量扩展时,通过扩展一倍的容量来减少内存的分配的次数,这样也保证了追加一个元素所消耗的是固定时间.

    4.通常情况下,我们并不清楚一次append调用会不会导致一次新的内存分配,所以我们不能假设原来的slice和
      新用append后的结果slice指向同一个底层数组,也无法证明它们指的是不同数组所以我们通常将append的
      调用结果再次赋值传入append函数的slice.

    5.append函数可以同时给slice添加多个元素,甚至添加另一个slice里的所有元素.
    例如:var x []int x=append(x,1) x=append(x,2) x=append(x,x...)//1,2
    //其中(...)表示函数可以接受可变长度参数列表

    具体使用代码:

    package main
    
    
    import "fmt"
    
    
    func main() {
    	//定义并创建一个切片
    	s1 := []int{1, 2, 3}
    	fmt.Println("原s1:", s1)
    	//append(s1, 5) // append(s1, 5) evaluated but not used ,不能够单独使用,必须把它赋给一个切片变量
    	s1 = append(s1, 5)
    	fmt.Println("新s1:", s1)
    
    
    	//通过make内置函数创建一个且切片,一般用for循环进行复制
    	s2 := make([]int, 10)
    	fmt.Println("原 s2:", s2) // s2: [0 0 0 0 0 0 0 0 0 0]
    	s2 = append(s2, 1)
    	fmt.Println("新 s2:", s2) // s2: [0 0 0 0 0 0 0 0 0 0 1]在后面加一个
    	for i := 0; i < len(s2); i++ {
    		s2[i] = i
    	}
    	fmt.Println("最新 s2:", s2) 
    
    
    	//append 函数会智能的在底层数组容量上增长,一旦超越了原来的底层数组的容量,通常是以1倍容量重新分配底层数组
    	s3 := make([]int, 2)
    	fmt.Println("len(s3):", len(s3), "cap(s3):", cap(s3)) //len(s3): 2 cap(s3): 2
    	s3 = append(s3, 1)
    	fmt.Println(s3)                                       //[0 0 1]
    	fmt.Println("len(s3):", len(s3), "cap(s3):", cap(s3)) //len(s3): 2 cap(s3): 4
    	s3 = append(s3, 1)
    	s3 = append(s3, 1)
    	fmt.Println("len(s3):", len(s3), "cap(s3):", cap(s3)) //len(s3): 5 cap(s3): 8
    
    
    }
    每天的价值就是不停息的前进!!!
  • 相关阅读:
    从一个表复制信息到另一个表
    Base64原理 bits 3>4 8bits/byte>6bits/byte
    blockchain
    routing decisions based on paths, network policies, or rulesets configured by a network administrator
    Least_squares 最小二乘法
    How to Write a Spelling Corrector
    prior knowledge
    Law of total probability
    Subset sum problem
    wdateyearmonthweekgategoryamountcoin
  • 原文地址:https://www.cnblogs.com/zhaopp/p/11486104.html
Copyright © 2020-2023  润新知