91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

go語言中切片如何加元素

發布時間:2023-01-13 17:26:35 來源:億速云 閱讀:90 作者:iii 欄目:編程語言

這篇文章主要介紹“go語言中切片如何加元素”,在日常操作中,相信很多人在go語言中切片如何加元素問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”go語言中切片如何加元素”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

在go語言中,可以使用append()為切片動態添加元素。append()可以向一個切片中追加一個元素、多個元素、新的切片,語法“append(切片, 元素1,元素2...)”或“append(切片,新切片...)”。使用append()函數為切片動態添加元素時,如果空間不足以容納足夠多的元素,切片就會進行“擴容”,此時新切片的長度會發生改變。

在go語言中,可以使用append()為切片動態添加元素。

Go語言 append()函數

append可以向一個slice中追加一個元素、多個元素、新的切片

var a []int
a = append(a, 1) // 追加1個元素
a = append(a, 1, 2, 3) // 追加多個元素, 手寫解包方式
a = append(a, []int{1,2,3}...) // 追加一個切片, 切片需要解包

不過需要注意的是,在使用 append() 函數為切片動態添加元素時,如果空間不足以容納足夠多的元素,切片就會進行“擴容”,此時新切片的長度會發生改變。

切片在擴容時,容量的擴展規律是按容量的 2 倍數進行擴充,例如 1、2、4、8、16……,代碼如下:

var numbers []int


for i := 0; i < 10; i++ {
    numbers = append(numbers, i)
    fmt.Printf("len: %d  cap: %d pointer: %p\n", len(numbers), cap(numbers), numbers)
}

代碼輸出如下:

go語言中切片如何加元素

代碼說明如下:

  • 第 1 行,聲明一個整型切片。

  • 第 4 行,循環向 numbers 切片中添加 10 個數。

  • 第 5 行,打印輸出切片的長度、容量和指針變化,使用函數 len() 查看切片擁有的元素個數,使用函數 cap() 查看切片的容量情況。

通過查看代碼輸出,可以發現一個有意思的規律:切片長度 len 并不等于切片的容量 cap。

往一個切片中不斷添加元素的過程,類似于公司搬家,公司發展初期,資金緊張,人員很少,所以只需要很小的房間即可容納所有的員工,隨著業務的拓展和收入的增加就需要擴充工位,但是辦公地的大小是固定的,無法改變,因此公司只能選擇搬家,每次搬家就需要將所有的人員轉移到新的辦公點。

  • 員工和工位就是切片中的元素。

  • 辦公地就是分配好的內存。

  • 搬家就是重新分配內存。

  • 無論搬多少次家,公司名稱始終不會變,代表外部使用切片的變量名不會修改。

  • 由于搬家后地址發生變化,因此內存“地址”也會有修改。

除了在切片的尾部追加,我們還可以在切片的開頭添加元素:

var a = []int{1,2,3}
a = append([]int{0}, a...) // 在開頭添加1個元素
a = append([]int{-3,-2,-1}, a...) // 在開頭添加1個切片

在切片開頭添加元素一般都會導致內存的重新分配,而且會導致已有元素全部被復制 1 次,因此,從切片的開頭添加元素的性能要比從尾部追加元素的性能差很多。

因為 append 函數返回新切片的特性,所以切片也支持鏈式操作,我們可以將多個 append 操作組合起來,實現在切片中間插入元素:

var a []int
a = append(a[:i], append([]int{x}, a[i:]...)...) // 在第i個位置插入x
a = append(a[:i], append([]int{1,2,3}, a[i:]...)...) // 在第i個位置插入切片

每個添加操作中的第二個 append 調用都會創建一個臨時切片,并將 a[i:] 的內容復制到新創建的切片中,然后將臨時創建的切片再追加到 a[:i] 中。

到此,關于“go語言中切片如何加元素”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

新竹县| 乾安县| 藁城市| 德阳市| 中宁县| 晋江市| 英超| 沾化县| 霍城县| 洪洞县| 原平市| 大名县| 若羌县| 科技| 乐业县| 惠东县| 五莲县| 镶黄旗| 辽中县| 潍坊市| 莫力| 黄冈市| 陈巴尔虎旗| 祁阳县| 伊金霍洛旗| 旬阳县| 泰安市| 遂川县| 祥云县| 唐山市| 平原县| 乐昌市| 湟源县| 宝山区| 沂水县| 泸西县| 遂昌县| 张家港市| 宝鸡市| 阳新县| 福鼎市|