gmnon.cn-疯狂蹂躏欧美一区二区精品,欧美精品久久久久a,高清在线视频日韩欧美,日韩免费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號
gmnon.cn-疯狂蹂躏欧美一区二区精品,欧美精品久久久久a,高清在线视频日韩欧美,日韩免费av一区二区
xxx国产在线观看| 日韩大片一区二区| 日本国产在线播放| 人人妻人人添人人爽欧美一区| 男人天堂手机在线视频| 97国产精东麻豆人妻电影| 波多野结衣50连登视频| wwwxxx黄色片| 欧洲美女亚洲激情| 国产freexxxx性播放麻豆 | 日韩av在线播放不卡| 日韩欧美一区二| 艹b视频在线观看| 最新视频 - x88av| 男人添女人下面高潮视频| 成人在线观看黄| 久久精品一二三四| 无罩大乳的熟妇正在播放| 国产免费999| 亚洲精品天堂成人片av在线播放| 欧美一区二区三区爽大粗免费| 国产一区视频免费观看| 色撸撸在线观看| 国产麻花豆剧传媒精品mv在线| 超碰91在线播放| 国产精品亚洲a| 97超碰人人爱| 美女网站免费观看视频| 久久男人资源站| 三上悠亚av一区二区三区| 成人午夜免费在线视频| 亚洲最大天堂网| 成人性视频欧美一区二区三区| a级片一区二区| 亚洲制服中文字幕| 国产1区2区在线| 一本久道高清无码视频| 国产成人强伦免费视频网站| 国产三级日本三级在线播放| 视色,视色影院,视色影库,视色网| 91视频最新入口| 日韩精品免费一区| 国产精品自在自线| 国产视频手机在线播放| 欧美高清中文字幕| 18视频在线观看娇喘| 青青草原国产在线视频| 丰满爆乳一区二区三区| 日本a在线免费观看| 国产香蕉一区二区三区| 桥本有菜av在线| 日本中文字幕在线不卡| 亚洲精品免费一区亚洲精品免费精品一区| 六月丁香婷婷在线| 成人毛片视频网站| 欧美一级视频在线播放| 污污污污污污www网站免费| 日韩不卡视频一区二区| 五月天色婷婷综合| 懂色av粉嫩av蜜臀av| 日韩video| 高清无码一区二区在线观看吞精| 久久精品一卡二卡| 久久久久久久免费视频| 国产在线无码精品| 日韩久久久久久久久久久久| 警花观音坐莲激情销魂小说| 九一免费在线观看| 日本人妻伦在线中文字幕| 人妻少妇精品久久| 人妻熟女一二三区夜夜爱| 热久久精品国产| 乌克兰美女av| 国产精品igao网网址不卡| 最新黄色av网站| 欧美精品卡一卡二| 老司机午夜av| 日韩av在线中文| 超碰97免费观看| 北条麻妃在线视频观看| 亚洲少妇第一页| 国产三级中文字幕| 尤物av无码色av无码| 91淫黄看大片| 91制片厂免费观看| 欧美 国产 综合| 成人免费在线观看视频网站| 五月天激情图片| 日韩精品一区中文字幕| 亚洲一区二区中文字幕在线观看| 91免费视频污| 成年人观看网站| 国产精品久久久久久9999| 欧美日韩视频免费| 中文字幕第36页| 欧美人与动牲交xxxxbbbb| av黄色在线网站| 熟女视频一区二区三区| 国产xxxxx在线观看| 99中文字幕在线观看| 成年人观看网站| 男女啪啪免费观看| 国产一级做a爰片久久| avav在线播放| 中文字幕久久av| 超碰网在线观看| 国产黄色片免费在线观看| 日韩不卡一二三| www.爱色av.com| 国产黄色激情视频| 亚洲女人在线观看| 午夜免费一区二区| 欧美 丝袜 自拍 制服 另类| 裸体裸乳免费看| 国产无遮挡猛进猛出免费软件| 国产老熟妇精品观看| 992tv成人免费观看| 三上悠亚av一区二区三区| www.亚洲天堂网| 国产一级爱c视频| 国产精品videossex国产高清| www.涩涩涩| 手机视频在线观看| 欧美激情精品久久久久久小说| 国产一级大片免费看| 91热视频在线观看| 免费av不卡在线| 在线观看av网页| 男女污污的视频| 国产精品天天av精麻传媒| av动漫免费看| 久草综合在线观看| 好男人www社区| 亚洲xxxx2d动漫1| 亚洲污视频在线观看| 狠狠操精品视频| 好男人www社区| 日本三区在线观看| 91淫黄看大片| 欧美日韩中文不卡| 中文字幕在线观看日| 一个色综合久久| 成人不卡免费视频| 天天操天天干天天玩| 亚洲色婷婷久久精品av蜜桃| 米仓穗香在线观看| 日韩精品综合在线| 777av视频| 国产三级三级三级看三级| 中文字幕国产传媒| 亚洲精品成人在线播放| 在线观看视频黄色| 欧美一级免费播放| 国产免费视频传媒| 91精品999| 久久免费一级片| 欧美精品一区免费| 在线观看免费的av| 日本女人高潮视频| 久久久亚洲精品无码| 能看的毛片网站| 日本成人xxx| 免费看一级大黄情大片| jizz欧美激情18| 国产成年人在线观看| 福利视频一二区| 可以免费在线看黄的网站| 久久精品一卡二卡| 免费在线观看亚洲视频 | 国产亚洲精品网站| 欧美一级视频在线| 青青在线视频免费观看| 男人操女人免费| 亚洲国产精品女人| 热久久精品免费视频| 成年丰满熟妇午夜免费视频 | 欧美性大战久久久久xxx| 不卡中文字幕在线观看| 欧美成人高潮一二区在线看| 国产福利影院在线观看| 日韩成人手机在线| 成人性生生活性生交12| 男人的天堂avav| 天天视频天天爽| 国产原创中文在线观看 | 女人帮男人橹视频播放| 久久久精品高清| 无码人妻h动漫| www插插插无码视频网站| 成人综合久久网| 黄色动漫网站入口| 亚洲精品天堂成人片av在线播放| 久久久久久三级| 成人在线免费观看av| 手机在线免费毛片| 婷婷免费在线观看| 亚洲狼人综合干| 日韩一级在线免费观看| 精品国产免费av| 青青草国产精品视频|