zoukankan      html  css  js  c++  java
  • golang切片

    知識點一覽:

    1. 切片的底層是數組
    2. 切片支持自動擴容
    3. 切片屬於引用類型
    4. 切片內部包括地址, 長度(len), 容量(cap).其中長度指切片中的元素個數,容量指底層實現的數組長度
    5. 切片一般用於快速操作一塊數據結合
    

    使用make函數構造切片

    s2 := make([]int, 4, 8)
        fmt.Println(s2, len(s2), cap(s2))

    切片的本質

    1. 切片是一種引用
    	當使用一個數組初始化切片的時候切片會和數組指向相同的地址
    

    如果在此時修改a1或者s1其中任何一個的內容,另外一個一會跟著改變.同時如果使用len和cap函數計算s1的長度和容量結果都是4.
        
    a1[0] = 100
        fmt.Println(s1, a1) //輸出[100 2 3 4] [100 2 3 4]
    2. 切片的底層是數組
    使用append函數給s1添加一個元素,然後測試s1的長度和容量,你會發現他的長度變成了5,但是容量變成了8.這是因為在切片動態擴容的時候會創建一個新的數組,新數組的長度是原本數組長度的2倍.也就是說切片的長度指的是切片當中的元素個數,而容量是底層數組的長度--如果在上面初始化的的時候只用a1的前3個元素初始化切片,那麼你會看到s1的長度是3,但是容量依舊為4,因為這個時候該切片的底層數組是a1.而當切片需要擴容的時候原本的數組就會被拋棄,並創建新的底層數組--不用擔心,如果go擁有垃圾回收功能--如果你還是不信可以不斷給切片添加元素,逼迫其自動擴容,然後輸出其每次的地址,你就會看到每次擴容的時候其地址都會改變.

    增刪改查

    1. 使用appden()增加元素
    s1 = append(s1, 200)
    注意: append不會在原本切片上修改切片,而是產生一個新的切片,所以想要修改產生左右必須將其賦值給原本的切片--如果不複製給一個變量,會出現語法錯誤,所以不用太擔心忘記.
    
    2. 沒有自帶刪除函數
    切片沒有默認的刪除元素的方法,但是可以通過append實現刪除元素的效果
    比如要刪除第2個元素(索引為1的元素)
    

    s1 = append(s1[:1], s1[2:]...)
    這樣就實現了元素刪除的功能,

    3. 通過索引修改,查看內容
    切片可以和數組一樣通過: 變量名[索引]的方式來取得切片中某個位置的內容或者修改他
    

    s1[0] = 100
    把索引為0的元素修改為100

  • 相关阅读:
    onInterceptTouchEvent 与 onTouchEvent 分析与MotionEvent在ViewGroup与View中的分发
    不用windows不会死
    iframe动态改变内嵌页面高度
    算法5-8:矩形相交
    浅析数据库连接池(二)
    Ubuntu下(Linux+Apache+MYSQL+PHP, LAMP)环境搭建
    unix环境高级编程----进程控制wait()
    centos7 通过kvm+vnc 实现远程桌面虚拟化和创建windows、Linux虚拟机
    Android native层动态库注射
    Windows10 下 JAVA JDK版本设置修改操作
  • 原文地址:https://www.cnblogs.com/ltozvxe/p/13718668.html
Copyright © 2011-2022 走看看