久久精品五月,日韩不卡视频在线观看,国产精品videossex久久发布 ,久久av综合

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

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號
久久精品五月,日韩不卡视频在线观看,国产精品videossex久久发布 ,久久av综合
日韩欧美激情| 老牛影视精品| 欧美69视频| 色老板在线视频一区二区| 成人日韩av| 国产在线观看91一区二区三区| 亚洲大全视频| 日韩成人a**站| 国产一区二区三区四区大秀 | 97se综合| 久久久国产精品网站| 婷婷亚洲成人| 亚洲天堂日韩在线| 最新亚洲国产| 日韩av成人高清| 国产探花一区| 成人在线视频中文字幕| 国产精品久久久久蜜臀| 中文字幕系列一区| 国产在线不卡| 亚洲精品1区| 亚洲精品伦理| 国产乱子精品一区二区在线观看| 日韩在线短视频| 欧美激情国产在线| 99久久亚洲精品蜜臀| 日韩av黄色在线| 久久精品xxxxx| 国产精品一区二区美女视频免费看 | 91精品国产自产观看在线| 青青草视频一区| 九九久久国产| 国精品一区二区三区| 免费日本视频一区| 欧美激情一区| 国产传媒av在线| 亚洲精品一区二区妖精| 天海翼精品一区二区三区| 国产精品xvideos88| 久久蜜桃精品| 中文字幕av亚洲精品一部二部| 亚洲国产福利| 激情综合亚洲| 亚洲一区二区日韩| 亚洲欧美日韩一区在线观看| 国产亚洲精品美女久久 | 成人免费电影网址| 国产黄大片在线观看| 欧产日产国产精品视频| 1024精品久久久久久久久| 日韩精品一区第一页| 青青草91久久久久久久久| 福利一区视频| 好吊视频一区二区三区四区| 日本亚洲最大的色成网站www | 欧美日韩视频免费看| 国产免费播放一区二区| 国产传媒在线观看| 最新亚洲激情| 日本91福利区| 欧美久久亚洲| 欧美国产小视频| 香蕉国产精品| 亚洲专区视频| 久久国产日韩欧美精品| www.51av欧美视频| 尤物精品在线| 国产欧美高清| 亚洲成人精品| 午夜在线精品| 国际精品欧美精品| 国产模特精品视频久久久久| 欧美日韩在线精品一区二区三区激情综合 | 麻豆网站免费在线观看| av一区在线| 综合一区在线| 国产精品2023| 欧美日韩精品一本二本三本| 欧美日韩亚洲一区| 日韩精品一区二区三区免费观影| 日本不卡视频在线| 久久精品一区二区国产| 婷婷综合在线| 欧美日韩xxxx| 欧美日韩视频网站| 亚洲欧洲美洲国产香蕉| 久久久久久色 | 日韩激情综合| 国产欧美成人| 欧美日韩一区二区综合| 久久wwww| 水野朝阳av一区二区三区| 国产日韩三级| 不卡在线一区| 久久中文字幕一区二区三区| 中文在线一区| 国内揄拍国内精品久久| 99国产精品久久久久久久成人热| 一区二区三区视频免费观看| 欧美激情麻豆| 欧美午夜三级| 91欧美日韩在线| 国产模特精品视频久久久久| 亚洲伦乱视频| 国产乱码精品一区二区三区四区 | 日本在线观看不卡视频| 成人黄色av| 精品美女在线视频| 7777精品| 91成人精品在线| 亚洲开心激情| 国产精品毛片在线| 亚洲电影在线一区二区三区| 五月激情久久| 精品一区二区男人吃奶| 婷婷综合成人| 国产手机视频一区二区| 日韩精品欧美| 啪啪国产精品| 电影91久久久| 国产精选久久| 日韩av字幕| 亚洲视频国产精品| 狠狠久久婷婷| 亚洲www啪成人一区二区| 91九色综合| 亚洲精品日韩久久| 成人午夜国产| 蜜臀国产一区| 动漫av一区| 精品国产乱码久久久久久樱花| 国产一区二区亚洲| 日韩有吗在线观看| 久久福利一区| 韩日一区二区三区| 日韩精品网站| 五月激情久久| 日韩福利一区| av高清不卡| 欧洲亚洲一区二区三区| 九九99久久精品在免费线bt| 欧美日韩调教| 69精品国产久热在线观看| 日韩1区2区3区| 久久这里只有| 亚洲福利专区| 亚洲三级观看| 亚洲国产一区二区三区在线播放| 亚洲精品日本| 久久国产88| 视频一区国产视频| 亚洲综合专区| 日本亚洲欧洲无免费码在线| 国产免费av一区二区三区| 日本成人中文字幕| 久久99精品久久久久久园产越南| 在线看片国产福利你懂的| 欧美极品中文字幕| 国产成人调教视频在线观看| 国产资源在线观看入口av| 国产精品传媒麻豆hd| 国产精品传媒麻豆hd| 久久女人天堂| 日韩一区二区在线免费| 久久久影院免费| 亚洲欧美成人综合| 日日夜夜免费精品视频| 国产精品一二| 亚洲性视频h| 日韩中文欧美在线| 国产探花一区在线观看| 欧美精品二区| 日韩欧美不卡| 免费久久99精品国产自在现线| 久久av资源| 精品三区视频| 日本一区二区三区中文字幕| 亚洲精品三级| 国产精品一区二区三区美女 | 欧美激情综合| 精品亚洲精品| 久久久久久久久久久9不雅视频| 欧美日一区二区在线观看| 国产亚洲久久| av中文资源在线资源免费观看| 日本一不卡视频| 日本高清久久| 日韩福利一区| 亚洲天堂av资源在线观看| 欧美日韩亚洲一区三区| 成人小电影网站| 国产精品日本| 久久国产免费看| 久久久久久久久久久9不雅视频| 日韩av片子| 91高清一区| 九九九精品视频| 99久久www免费| 久久丁香四色| 青青久久av|