0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

數(shù)組中如何增加切片的容量

麥辣雞腿堡 ? 來源:盼盼編程 ? 作者:盼盼編程 ? 2023-10-09 10:01 ? 次閱讀

切片擴容

相對于數(shù)組而言,使用切片的一個好處是:可以按需增加切片的容量。

Golang 內(nèi)置的 append() 函數(shù)會處理增加長度時的所有操作細(xì)節(jié)。要使用 append() 函數(shù),需要一個被操作的切片和一個要追加的值,當(dāng) append() 函數(shù)返回時,會返回一個包含修改結(jié)果的新切片。

函數(shù) append() 總是會增加新切片的長度,而容量有可能會改變,也可能不會改變,這取決于被操作的切片的可用容量。

num := []int{1, 2, 3, 4, 5}
// 創(chuàng)建新的切片,其長度為 2 個元素,容量為 4 個元素

myNum := num[1:3]
// 使用原有的容量來分配一個新元素
// 將新元素賦值為 60
myNum = append(myNum, 60)

執(zhí)行上面的代碼后的底層數(shù)據(jù)結(jié)構(gòu)如下圖所示:

圖片

此時因為 myNum 在底層數(shù)組里還有額外的容量可用,append() 函數(shù)將可用的元素合并入切片的長度,并對其進行賦值。

由于和原始的切片共享同一個底層數(shù)組,myNum 中索引為 3 的元素的值也被改動了。

如果切片的底層數(shù)組沒有足夠的可用容量,append() 函數(shù)會創(chuàng)建一個新的底層數(shù)組,將被引用的現(xiàn)有的值復(fù)制到新數(shù)組里,再追加新的值,此時 append 操作同時增加切片的長度和容量:

// 創(chuàng)建一個長度和容量都是 4 的整型切片
num := []int{1, 2, 3, 4}

// 向切片追加一個新元素
// 將新元素賦值為 5
myNum := append(num, 5)

當(dāng)這個 append 操作完成后,newSlice 擁有一個全新的底層數(shù)組,這個數(shù)組的容量是原來的兩倍:

圖片

函數(shù) append() 會智能地處理底層數(shù)組的容量增長。

在切片的容量小于 1000 個元素時,總是會成倍地增加容量。一旦元素個數(shù)超過 1000,容量的增長因子會設(shè)為 1.25,也就是會每次增加 25%的容量(隨著語言的演化,這種增長算法可能會有所改變)。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 函數(shù)
    +關(guān)注

    關(guān)注

    3

    文章

    4260

    瀏覽量

    62231
  • 數(shù)據(jù)結(jié)構(gòu)

    關(guān)注

    3

    文章

    569

    瀏覽量

    40063
  • 數(shù)組
    +關(guān)注

    關(guān)注

    1

    文章

    411

    瀏覽量

    25858
  • 切片
    +關(guān)注

    關(guān)注

    1

    文章

    22

    瀏覽量

    8436
收藏 人收藏

    評論

    相關(guān)推薦

    關(guān)于大容量數(shù)組某個元素的定位問題

    請教下,一個采集卡以400k的速率采集數(shù)據(jù)。在采集過程數(shù)組如何獲得第600k、第800k個點呢,我嘗試用索引數(shù)組配合case結(jié)構(gòu),但發(fā)現(xiàn)索引位置變化太慢請問大家有辦法嗎?
    發(fā)表于 06-17 23:49

    labview如何創(chuàng)造一個不斷增加數(shù)組

    while循環(huán)設(shè)置為“真時停止”,為什么我按停止后,數(shù)組才會不斷增加而,而打false則數(shù)組增加?不是應(yīng)該繼續(xù)的時候才執(zhí)行while的程
    發(fā)表于 01-17 16:56

    數(shù)組大小的增加 怎么拉動

    如圖 有時候數(shù)組增加了一個之后 在怎么拉動數(shù)組的控件都只是改變控件外形大小,那個增加輸入的小框框就是調(diào)不出來
    發(fā)表于 07-11 15:58

    數(shù)組在內(nèi)存的存儲解析

    數(shù)組容量是固定的,只能一次獲取或設(shè)置一個元素的值,而ArrayList或List的容量可根據(jù)需要自動擴充、修改、刪除或插入數(shù)據(jù)。數(shù)組可以具有多個維度,而 ArrayList或 Lis
    發(fā)表于 01-14 22:22 ?6021次閱讀

    java數(shù)組的三種定義方式_java數(shù)組的定義及使用方法(推薦)

    java數(shù)組是一種很常用的工具,本文將介紹來java數(shù)組的三種定義方式以及java數(shù)組
    發(fā)表于 01-29 09:53 ?3.2w次閱讀

    SystemVerilog數(shù)組的賦值、索引和切片

    數(shù)組可以作為參數(shù)傳遞給子程序,當(dāng)數(shù)組作為值傳遞給子程序時,會將這個數(shù)組復(fù)制一份傳遞給子程序。
    的頭像 發(fā)表于 10-20 10:13 ?5011次閱讀

    增加Arduino引腳的電流容量

    電子發(fā)燒友網(wǎng)站提供《增加Arduino引腳的電流容量.zip》資料免費下載
    發(fā)表于 12-16 10:16 ?0次下載
    <b class='flag-5'>增加</b>Arduino引腳的電流<b class='flag-5'>容量</b>

    帶你了解SystemVerilog的關(guān)聯(lián)數(shù)組

    在SystemVerilog,我們知道可以使用動態(tài)數(shù)組實現(xiàn)數(shù)組元素個數(shù)的動態(tài)分配,即隨用隨分
    的頭像 發(fā)表于 06-09 09:46 ?6981次閱讀
    帶你了解SystemVerilog<b class='flag-5'>中</b>的關(guān)聯(lián)<b class='flag-5'>數(shù)組</b>

    Go切片的內(nèi)部實現(xiàn)

    切片 Go中提供了一種靈活,功能強悍的內(nèi)置類型Slices切片(“動態(tài)數(shù)組"),與數(shù)組相比切片的長度是不固定的,可以追加元素,在追加時可能使
    的頭像 發(fā)表于 10-09 09:43 ?498次閱讀
    Go<b class='flag-5'>切片</b>的內(nèi)部實現(xiàn)

    golang通過切片創(chuàng)建新的切片

    slice 的第幾個元素開始切,j 控制切片的長度(j-i),k 控制切片容量(k-i),如果沒有給定 k,則表示切到底層數(shù)組的最尾部。下面是幾種常見的簡寫形式: slice [i
    的頭像 發(fā)表于 10-09 09:48 ?664次閱讀
    golang通過<b class='flag-5'>切片</b>創(chuàng)建新的<b class='flag-5'>切片</b>

    golan共享底層數(shù)組切片

    nil 和空切片 有時,程序可能需要聲明一個值為 nil 的切片(也稱nil切片)。只要在聲明時不做任何初始化,就會創(chuàng)建一個 nil 切片。 var num [] int 在 Gola
    的頭像 發(fā)表于 10-09 09:56 ?548次閱讀
    golan共享底層<b class='flag-5'>數(shù)組</b>的<b class='flag-5'>切片</b>

    js判斷是否在數(shù)組存在

    JavaScript 是一種用于客戶端和服務(wù)器端編程的腳本語言。它提供了許多內(nèi)置函數(shù)和方法,以便進行數(shù)組操作。 在本文中,我們將學(xué)習(xí)如何使用 JavaScript 來判斷一個元素是否存在于數(shù)組
    的頭像 發(fā)表于 11-30 16:23 ?1021次閱讀

    labview怎么查數(shù)組相同元素的個數(shù)

    要查找LabVIEW數(shù)組相同元素的個數(shù),可以使用以下步驟: 創(chuàng)建一個包含要查找的數(shù)值的數(shù)組。這可以通過手動輸入數(shù)組元素或從文件/其他數(shù)據(jù)
    的頭像 發(fā)表于 12-28 16:42 ?2907次閱讀

    PHP數(shù)組的使用方法!

    PHP數(shù)組的使用方法! PHP是一種廣泛使用的網(wǎng)絡(luò)編程語言,它的數(shù)組功能非常強大且靈活。數(shù)組是一種數(shù)據(jù)結(jié)構(gòu),它允許我們在單個變量存儲多個
    的頭像 發(fā)表于 01-12 15:11 ?457次閱讀

    數(shù)組和鏈表在內(nèi)存的區(qū)別 數(shù)組和鏈表的優(yōu)缺點

    數(shù)組和鏈表在內(nèi)存的區(qū)別 數(shù)組和鏈表的優(yōu)缺點? 數(shù)組和鏈表是常見的數(shù)據(jù)結(jié)構(gòu),用于組織和存儲數(shù)據(jù)。它們在內(nèi)存的存儲方式以及優(yōu)缺點方面存在一些
    的頭像 發(fā)表于 02-21 11:30 ?767次閱讀