成人怡红院-成人怡红院视频在线观看-成人影视大全-成人影院203nnxyz-美女毛片在线看-美女免费黄

站長資訊網
最全最豐富的資訊網站

go語言中list怎么刪除元素

在go語言中,可以使用remove()函數來刪除list元素,語法“list對象.Remove(element)”,參數element表示要刪除列表元素。element元素不能為空,如果不為空則返回被刪除的元素的值,如果為空則會報異常。

go語言中list怎么刪除元素

本教程操作環境:windows7系統、GO 1.18版本、Dell G3電腦。

go提供了一個list包,類似python的list,可以存儲任意類型的數據,并提供了相應的API,如下:

type Element     func (e *Element) Next() *Element     func (e *Element) Prev() *Element type List     func New() *List     func (l *List) Back() *Element     func (l *List) Front() *Element     func (l *List) Init() *List     func (l *List) InsertAfter(v interface{}, mark *Element) *Element     func (l *List) InsertBefore(v interface{}, mark *Element) *Element     func (l *List) Len() int     func (l *List) MoveAfter(e, mark *Element)     func (l *List) MoveBefore(e, mark *Element)     func (l *List) MoveToBack(e *Element)     func (l *List) MoveToFront(e *Element)     func (l *List) PushBack(v interface{}) *Element     func (l *List) PushBackList(other *List)     func (l *List) PushFront(v interface{}) *Element     func (l *List) PushFrontList(other *List)     func (l *List) Remove(e *Element) interface{}
登錄后復制

其中,remove()函數用于列表list刪除元素,刪除的元素不能為空,如果為空,會報異常。

Remove(e *Element) interface{}
登錄后復制

參數 描述
e 要刪除列表元素。

返回值

  • 返回被刪除的元素的值。

列表刪除元素的示例

示例1:

package main import ( 	"container/list" 	"fmt" ) func main() { 	//使用 Remove 在列表中刪除元素 	listHaiCoder := list.New() 	listHaiCoder.PushFront("Hello") 	listHaiCoder.PushFront("HaiCoder") 	element := listHaiCoder.PushFront("Hello") 	removeEle := listHaiCoder.Remove(element) 	fmt.Println("RemoveElement =", removeEle) 	for i := listHaiCoder.Front(); i != nil; i = i.Next() { 		fmt.Println("Element =", i.Value) 	} }
登錄后復制

go語言中list怎么刪除元素

分析:

  • 我們通過 list.New 創建了一個列表 listHaiCoder,接著使用 PushFront 函數在列表中插入三個元素,接著使用 Remove 函數刪除了最后插入的元素。

  • 最后,我們打印被刪除的元素和刪除后的列表,Remove 函數返回的是被刪除的元素的值,同時,我們發現最后插入的元素已經被成功從列表刪除了。

示例2:刪除空元素

package main import ( 	"container/list" 	"fmt" ) func main() { 	//使用 Remove 在列表中刪除空元素,報錯 	listHaiCoder := list.New() 	listHaiCoder.PushFront("Hello") 	listHaiCoder.PushFront("HaiCoder") 	listHaiCoder.Remove(nil) }
登錄后復制

程序運行后,控制臺輸出如下:

go語言中list怎么刪除元素

擴展知識:list刪除所有元素

借助list包提供的API,list用起來確實挺方便,但是在使用過程中,如果不注意就會遇到一些難以發現的坑,導致程序結果不是預想的那樣。這里要說的坑是通過for循環遍歷list,并刪除所有元素時會遇到的問題。例如,下面這個示例程序創建了一個list,并依次將0-3存入,然后通過for循環遍歷list刪除所有元素:

package main import (     "container/list"     "fmt" ) func main() {     l := list.New()     l.PushBack(0)     l.PushBack(1)     l.PushBack(2)     l.PushBack(3)     fmt.Println("original list:")     prtList(l)     fmt.Println("deleted list:")     for e := l.Front(); e != nil; e = e.Next() {         l.Remove(e)     }     prtList(l) } func prtList(l *list.List) {     for e := l.Front(); e != nil; e = e.Next() {         fmt.Printf("%v ", e.Value)     }     fmt.Printf("n") }
登錄后復制

運行程序輸出如下:

original list: 0 1 2 3 deleted list: 1 2 3
登錄后復制

從輸出可以知道,list中的元素并沒有被完全刪除,僅刪除了第一個元素0,和最初設想不一樣,按照go的使用習慣,遍歷一個list并刪除所有元素寫法應該如下:

for e := l.Front(); e != nil; e = e.Next() {     l.Remove(e) }
登錄后復制

但是根據上面示例代碼的輸出,這樣刪除list所有元素是無效的,那么問題出在哪呢?由for循環的機制可以知道,既然刪除了第一個元素,沒有刪除第二個元素,肯定是第二次循環的條件無效,才導致循環退出,即執行完下面語句后:

l.Remove(e)
登錄后復制

e應該為nil,所以循環退出。在for循環中的l.Remove(e)語句前添加打印語句驗證,例如添加如下語句:

fmt.Println("delete a element from list")
登錄后復制

運行程序輸出如下:

original list: 0 1 2 3 deleted list: delete a element from list 1 2 3
登錄后復制

可以看到,確實只循環了一次,循環就結束了。即當執行完語句l.Remove(e)后,e等于e.Next(),因為e.Next()為nil,導致e為nil,循環退出。為什么e.Next()會是nil呢?通過查看go list源碼,如下所示:

// remove removes e from its list, decrements l.len, and returns e. func (l *List) remove(e *Element) *Element {     e.prev.next = e.next     e.next.prev = e.prev     e.next = nil // avoid memory leaks     e.prev = nil // avoid memory leaks     e.list = nil     l.len--     return e } // Remove removes e from l if e is an element of list l. // It returns the element value e.Value. func (l *List) Remove(e *Element) interface{} {     if e.list == l {         // if e.list == l, l must have been initialized when e was inserted         // in l or l == nil (e is a zero Element) and l.remove will crash         l.remove(e)     }     return e.Value }
登錄后復制

由源碼中可以看到,當執行l.Remove(e)時,會在內部調用l.remove(e)方法刪除元素e,為了避免內存泄漏,會將e.next和e.prev賦值為nil,這就是問題根源。

修正程序如下:

package main import (     "container/list"     "fmt" ) func main() {     l := list.New()     l.PushBack(0)     l.PushBack(1)     l.PushBack(2)     l.PushBack(3)     fmt.Println("original list:")     prtList(l)     fmt.Println("deleted list:")     var next *list.Element     for e := l.Front(); e != nil; e = next {         next = e.Next()         l.Remove(e)     }     prtList(l) } func prtList(l *list.List) {     for e := l.Front(); e != nil; e = e.Next() {         fmt.Printf("%v ", e.Value)     }     fmt.Printf("n") }
登錄后復制

運行程序輸出如下:

original list: 0 1 2 3 deleted list:
登錄后復制

可以看見,list中的所有元素已經被正確刪除。

贊(0)
分享到: 更多 (0)
?
網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
内射大B美女毛片| 国产尤物AV尤物在线观看| 西欧FREE性满足HD| 九九视频在线观看视频6| 幼儿HIPHOP仙踪林的功能| 日韩精品无码一区二区三区| 九九爱WWW免费人成视频| A级国产乱理伦片在线观看| 玩弄人妻熟妇性色AV少妇| 痉挛高潮喷水AV无码免费| 爆乳上司JULIA中文字幕| 哪种女人弄进去最舒服| 东京热无码一区二区三区AV| 亚洲人成人一区二区三区| 麻花传媒网站永久入口视频| OLDGRAANNY日本老熟妇| 为老公升职我主动奉献的句子说说 | 亚洲熟伦熟女新五十路熟妇| 我和大佬的365天| 久久久国产成人一区二区| 成人H视频在线观看| 午夜亚洲乱码伦小说区69堂| 亂倫近親相姦中文字幕AV| 国产精品99久久久久久宅男小说| 亚洲熟妇无码乱码AV电影| 日本伊人精品一区二区三区 | 亚洲成A人一区二区三区| 女人被躁到高潮嗷嗷叫小说百度| 国产肥熟女视频一区二区三区| 亚洲欧美日韩综合久久| 日产乱码一二三区别免费看 | 差差差不多视频30分钟轮滑| 人妻精品丝袜一区二区无码AV| 鲁鲁夜夜天天综合视频| 亚洲精品国产一二三无码AV| 人妻少妇精品国语对白| 麻豆国产果冻自制传媒| 久久精品人人做人人综合试看| 亚洲丰满熟女一区二区V| 亚洲日本一线产区二线产区 | 亚洲中文字幕波多野结衣| 亚洲AV无码天堂一区二区三区| 我和亲妺妺乱的性视频| 日产精品一卡2卡三卡4乱码| 色婷婷五月综合激情中文字幕 | 日本久久久久久久久久加勒比| 蜜臀AV一区二区三区四区| 护士猛少妇色ⅩXXXX猛叫| 在图书馆揉捏她的双乳| 欧洲最猛黑人XXXⅩ猛男欧| 免费观看潮喷到高潮| 免费无遮挡又黄又爽网站| 欧美丰满性久久久久久久| 欧美群交性爱视频| 无码午夜福利片在线观看| 欧美熟妇精品视频网免费观看| 久久久AV波多野一区二区| 国产欧美久久久精品影院| 国产精品99久久久久| 国产又粗又猛又爽又黄的网站 | 日本XXWWWXXXX| 精品国产乱码久久久久久小说 | 亚洲乱色熟女一区二区三区丝袜| 在线观看亚洲一区| 国产成人精品一区二区视频| 国产男男Gay做受×Xx男| 国产乱人伦真实精品视频| 国产精品未满十八禁止观看| 国产亚洲精品第一综合另类灬| 久久久久亚洲AV成人网人人| 免费A级毛片无码韩国| 免费A级毛片无码免费视频| 欧美黑人又大又粗XXXX| 人妻精品AAAA中文字幕69| 麻豆传播媒体2023最新网站| 欧美人交a欧美精品a∨一区| 久热中文字幕无码视频| 绿帽娇妻在卧室疯狂的呻吟| 日本十八禁视频无遮挡| 亚洲丰满熟妇乱XXXXX网站| 无码熟妇人妻AV在线网站| 亚洲色偷偷综合亚洲av伊人| 无线乱码A区B区C区D| 性色A码一区二区三区天美传媒| 色婷婷亚洲十月十月色天| 亚洲精品日韩AV专区| 纯肉无遮挡H肉动漫在线观看国产| 久久综合精品国产一区二区三区无 | 麻豆我精产国品一二三产区区别| 久久夜色精品国产亚洲AV| 欧美精品双插重口在线播放| 无码AV免费一区二区三区| 夜夜高潮夜夜爽夜夜爱爱| 2021久久精品国产99国产精| JAPANESEⅩⅩⅩHD日本| 国产精品人人妻人色五月 | 日韩亚洲AV人人夜夜澡人人爽| 天天躁日日躁狠狠躁AV中文| 自拍亚洲综合在线精品| CHINESE国产HD中国熟女| 国产精品国产三级国产AV主播 | 久久九九久精品国产88| 少妇厨房愉情理伦片BD在线观看 | 搡老女人熟妇老太HD| 在厨房拨开内裤进入毛片 | 亚洲色偷偷综合亚洲AV色欲| 狠痕鲁狠狠爱2021在| 亚洲AV优女天堂熟女| 国产AV成人无码精品网站| 欧美精品视频一区二区| 亚洲色大18成人网站WWW| 国产精品久久国产精品99| 人人添人人妻人人爽频| 艳妇臀荡乳欲伦交换H漫画小说| 免费无码AV一区二区波多野结衣| 亚洲AV网站在线| 国产偷窥真人视频在线观看| 特级欧美AAAAAAA免费观看| 波多野结衣与黑人AV| 欧亚尺码专线欧洲B1B1| 9LPORM自拍视频区九色| 拗女稀缺资源一区二区| 最新国产精品久久精品| 美女露100%双奶头无遮挡图片| 呦女IUU极品资源| 麻花豆传媒剧国产MV在线下载| 影音先锋女人AV鲁色资源网久久| 久久久久久精品免费不卡| 亚洲最大成人网站| 久久丫精品国产亚洲AV不卡| 伊人久久大香线蕉综合AV| 理论片午午伦夜理片1| 中国大陆女RAPPER欢迎你| 末发育娇小性色XXXXX视频| 97精品人妻一区二区三区香蕉| 男生女生一起相差差差| FREE性欧美╳╳╳HD| 人妻有码中文字幕| 成人毛片100部免费看| 色777狠狠狠综合| 国产成人精品久久久久精品日日| 忘忧草视频在线观看| 国产在线清纯极品美女援交| 亚洲变态另类调教久久久| 精品国产亚洲一区二区三区| 亚洲制服无码一区二区三区| 狂躁美女大BBBBBB视频U| 97久久欧美极品少妇XXXXⅩ| 人妻少妇精品无码系列| 丰满妇女强高潮18ⅩXXX在线| 无码纯肉视频在线观看喷水| 哈昂~哈昂够了太多了动图| 亚洲小说区图片区另类春色| 免费的看片APP| 被粗大噗嗤噗嗤进出灌满浓浆| 三个男人躁我一个爽| 国产精品亚洲А∨天堂2018| 亚洲国产精品嫩草影院久久| 久久综合久久鬼色| A级毛片内射免费视频| 色狠狠色噜噜AV一区| 国产人与Z0XXⅩⅩ另类| 亚洲乱码1卡2卡3乱码在线芒果| 浪潮AV激情高潮国产精品| AV无码人妻一区二区三区牛牛| 少妇99久久黑人| 含羞草亚洲AV无码久久精品| 野花香影院在线观看视频免费| 欧美巨大乳BBWVIDEOS| 国产9 1在线 | 欧洲| 亚洲成AV人片在线观看| 两根硕大一起挤进小紧H共妻| XX娇小嫩XX中国XX| 无人区乱码一区二区三区| 久久久久久久99精品国产片| JAPANESE国产中文在线观| 天天综合天天爱天天做| 精品熟女少妇AⅤ免费久久| 19岁MACBOOKPRO免费| 少妇又紧又色又爽又刺激视频| 极品人妻系列人妻30P| 91精品人妻一区二区三区蜜桃| 少妇白浆高潮无码免费区| 精产国品一二三产品区别大吗 | 无码国产69精品久久久久APP| 久久精品国产99精品亚洲蜜桃| CHINESE熟女老女人HD,| 无码AV专区丝袜专区| 久久无码无码久久综合综合 | 日韩高清在线中文字带字幕| 好疼太大了太粗太长了视频| 4HUWWW四虎永久免费| 铜铜铜铜铜铜铜铜好大好硬 | 日本少妇人妻ⅩⅩXXX厨房| 国内精品久久久久影院蜜芽蜜芽T| 中国女人黑森林毛耸耸| 调教秘书跪趴撅起来打光屁股作文 | 国产成人啪精品视频免费APP| 一本一本久久A久久综合精品| 色欲色欲天天天WWW亚洲伊|