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一区二区
日韩小视频网站| aaa免费在线观看| 欧美又黄又嫩大片a级| 911福利视频| 国产精品无码电影在线观看| 国产v亚洲v天堂无码久久久 | 91精产国品一二三产区别沈先生| av网站大全免费| 成人不卡免费视频| 人妻无码视频一区二区三区| 欧美一二三不卡| 欧美一级免费在线| 国产视频九色蝌蚪| 成人在线观看毛片| 欧美一级中文字幕| 久久天天东北熟女毛茸茸| 999在线精品视频| 成人亚洲免费视频| 欧美极品欧美精品欧美| 中文精品无码中文字幕无码专区| 日韩久久一级片| 国产激情在线观看视频| 男人用嘴添女人下身免费视频| 国产制服91一区二区三区制服| 中文国产在线观看| 污视频在线观看免费网站| 亚洲三级在线观看视频| 亚洲国产日韩欧美在线观看| 狠狠操狠狠干视频| 伊人免费视频二| 国产精品12p| 天堂а√在线中文在线| 野外做受又硬又粗又大视频√| 日韩人妻无码精品久久久不卡| 日本熟妇人妻xxxx| 日韩av资源在线| 欧美女同在线观看| 黄频视频在线观看| 成人一区二区免费视频| 欧美日韩亚洲第一| 伊人影院综合在线| 91嫩草国产丨精品入口麻豆| 成人黄色av片| www.99在线| 一级片黄色免费| 欧美日韩精品在线一区二区| 国产欧美高清在线| 欧美 国产 精品| 久久久久久久激情| 6080国产精品| 久久精品免费一区二区| 一级黄色在线播放| 欧美激情 国产精品| 亚洲精品综合在线观看| 福利视频免费在线观看| 欧美丰满熟妇xxxxx| 日韩中文在线字幕| 日韩欧美黄色大片| 欧美国产视频一区| 日本黄大片一区二区三区| www.国产在线视频| www国产精品内射老熟女| 国内av免费观看| 美女日批免费视频| 善良的小姨在线| 三级a在线观看| 日韩精品―中文字幕| 中文字幕乱码免费| 欧美成人三级在线播放| 青青青在线播放| 午夜免费福利小电影| 日本一道在线观看| 国产福利精品一区二区三区| 国产日产欧美视频| 欧美综合在线播放| 国产女主播自拍| 成年人三级视频| 国产又粗又猛大又黄又爽| mm131国产精品| 九九热在线免费| 亚洲 欧美 日韩系列| 男女高潮又爽又黄又无遮挡| 男人添女人荫蒂免费视频| 奇米777在线| 国产福利片一区二区| 亚洲激情在线观看视频| 91猫先生在线| 亚洲日本黄色片| 欧洲黄色一级视频| 国产淫片免费看| 天天综合网日韩| 天天摸天天舔天天操| 天天操天天爽天天射| 孩娇小videos精品| 国产一级片中文字幕| 国产精品av免费| 欧妇女乱妇女乱视频| 欧美狂野激情性xxxx在线观| 日韩精品在线观看av| 久久99中文字幕| 日本网站免费在线观看| 国产黄色特级片| 国产资源中文字幕| 在线观看免费视频高清游戏推荐| 国产福利精品一区二区三区| 欧美xxxxx在线视频| 九九精品久久久| 黄频视频在线观看| 91九色丨porny丨国产jk| 男人靠女人免费视频网站| 中国丰满人妻videoshd| 色综合久久久久无码专区| 成年人免费在线播放| 国产黑丝在线视频| 久久综合色视频| 午夜免费视频网站| 国产午夜福利在线播放| 国产九九在线观看| 国产精品12345| 一起操在线视频| 无码 制服 丝袜 国产 另类| 久久国产精品国产精品| 日韩精品福利片午夜免费观看| 少妇人妻无码专区视频| a在线观看免费视频| 青青青青在线视频| 五月天开心婷婷| 波多野结衣家庭教师在线播放| www.国产福利| 蜜臀视频一区二区三区| 国产欧美日韩网站| 超碰中文字幕在线观看| 在线免费av播放| 成人av在线不卡| 日韩av片免费观看| 毛片毛片毛片毛片毛片毛片毛片毛片毛片| 国产高清免费在线| 99视频精品免费| 狠狠97人人婷婷五月| 一级全黄肉体裸体全过程| av之家在线观看| 欧美性受xxxx黒人xyx性爽| 国产视频在线视频| 日韩av在线综合| 欧美成人一区二区在线观看| 人体内射精一区二区三区| 成人国产在线看| aaa免费在线观看| 日本一二三四区视频| 911福利视频| 日韩av片免费观看| 视频在线观看免费高清| 最近中文字幕一区二区| 大香煮伊手机一区| 午夜免费精品视频| 亚洲高清在线免费观看| 污污的网站18| 欧美特黄aaa| 日本中文字幕在线不卡| 欧美日韩一区二区三区电影| 国产又黄又爽免费视频| japanese在线播放| 国产91沈先生在线播放| 777av视频| 日韩精品一区中文字幕| 韩日视频在线观看| 亚洲 欧美 日韩 国产综合 在线 | 日本黄色福利视频| jizz大全欧美jizzcom| 日韩av一卡二卡三卡| 中文字幕第三区| 2018中文字幕第一页| 欧美一级片中文字幕| 久久久久久久久久久久久久久国产 | 欧美亚洲精品一区二区| 国产裸体舞一区二区三区| 精品亚洲一区二区三区四区| 亚洲高清av一区二区三区| 精品一区二区三区毛片| 欧美 日韩 国产一区| 一本色道久久亚洲综合精品蜜桃| 波多野结衣在线免费观看| 美女扒开大腿让男人桶| 手机在线国产视频| 动漫av免费观看| 麻豆tv在线播放| 337p亚洲精品色噜噜狠狠p| 欧美第一页浮力影院| 人人干视频在线| 九九精品久久久| 91丨九色丨蝌蚪| 午夜天堂在线视频| 国产精品wwwww| 欧美中日韩在线| 影音先锋男人的网站| 网站一区二区三区| 三级在线免费看| 在线免费观看视频黄| 激情综合网俺也去| 亚洲爆乳无码专区|