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

站長資訊網(wǎng)
最全最豐富的資訊網(wǎng)站

go語言中l(wèi)ist怎么刪除元素

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

go語言中l(wèi)ist怎么刪除元素

本教程操作環(huán)境:windows7系統(tǒng)、GO 1.18版本、Dell G3電腦。

go提供了一個list包,類似python的list,可以存儲任意類型的數(shù)據(jù),并提供了相應的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()函數(shù)用于列表list刪除元素,刪除的元素不能為空,如果為空,會報異常。

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

參數(shù) 描述
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語言中l(wèi)ist怎么刪除元素

分析:

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

  • 最后,我們打印被刪除的元素和刪除后的列表,Remove 函數(shù)返回的是被刪除的元素的值,同時,我們發(fā)現(xiàn)最后插入的元素已經(jīng)被成功從列表刪除了。

示例2:刪除空元素

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

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

go語言中l(wèi)ist怎么刪除元素

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

借助list包提供的API,list用起來確實挺方便,但是在使用過程中,如果不注意就會遇到一些難以發(fā)現(xiàn)的坑,導致程序結(jié)果不是預想的那樣。這里要說的坑是通過for循環(huán)遍歷list,并刪除所有元素時會遇到的問題。例如,下面這個示例程序創(chuàng)建了一個list,并依次將0-3存入,然后通過for循環(huán)遍歷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) }
登錄后復制

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

l.Remove(e)
登錄后復制

e應該為nil,所以循環(huán)退出。在for循環(huán)中的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
登錄后復制

可以看到,確實只循環(huán)了一次,循環(huán)就結(jié)束了。即當執(zhí)行完語句l.Remove(e)后,e等于e.Next(),因為e.Next()為nil,導致e為nil,循環(huán)退出。為什么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 }
登錄后復制

由源碼中可以看到,當執(zhí)行l(wèi).Remove(e)時,會在內(nèi)部調(diào)用l.remove(e)方法刪除元素e,為了避免內(nèi)存泄漏,會將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中的所有元素已經(jīng)被正確刪除。

贊(0)
分享到: 更多 (0)
?
網(wǎng)站地圖   滬ICP備18035694號-2    滬公網(wǎng)安備31011702889846號
么公的粗大挺进了我的密道| 精品欧美一区二区在线观看| 国产人妖视频一区二区| 国语对白做受XXXXX在线中国 | 人人人妻人人澡人人爽| 欧美性猛交XXXX| 日韩高清在线中文字带字幕| 特级毛片全部免费播放| 无码人妻ΑⅤ免费一区二区三区| 久久久久精品国产亚洲AV麻豆 | 草莓 丝瓜 香蕉 向日葵 榴莲| 高清性色生活片97| 好男人资源在线WWW免费| 久久久久精品老熟女国产精品| 免费拗女网站1300部| 日本另类ΑV欧美另类AⅤ| 熟女高潮精品一区二区绯乐| 亚洲成A人片在线观看无码3D| 真人无码作爱免费视频| 车上震动A级作爱视频| 国产女主播高潮在线播放| 久久久久人妻一区精品| 人体内射精一区二区三区| 无码精品尤物一区二区三区| 亚洲日韩精品无码一区二区三区 | 四虎影库884AA.WWW| 亚洲国产精久久久久久久| 正在播放强揉爆乳女教师| 粗大的内捧猛烈进出A片男男小说| 国产亚洲AV无码AV男人的天堂| 久久综合给合久久狠狠狠97色6 | 国产精品香蕉成人网在线观看| 久久国产乱子伦精品免费女人| 波多野结衣美乳人妻HD电影欧美| 一区二区三区中文字幕| www.内射孕妇网站入口| 国产午夜福利在线播放| 男男车车的车车网站W98免费| 少妇被又粗又硬猛烈进出小说| 亚洲VA久久久噜噜噜久久狠狠| 999国内精品永久免费视频| 国产精品久久这里只有精品| 精品无码一区二区三区| 精品无码国产AV一区二区三区| 青青草国产精品亚洲专区无码| 亚洲AV成人精品五区| 97久久人人超碰超碰窝窝| 国产精品丝袜黑色高跟鞋| 麻豆CHINESE男男GAYF| 四虎影视新紧急入口| 一区二区AV在线| 国产V综合V亚洲欧| 麻花豆传媒剧国产MV网站入口| 熟妇人妻不卡无码一区| 一炕四女被窝交换| 国产激情久久久久影院老熟女免费| 久久久久国色AV免费看图片| 深入浅出糙汉X软妹V1V| 在线天堂中文最新版| 国产精品无码无卡无需播放器| 免费影视观看网站入口| 小妖精抬起臀嗯啊H军人| TPU色母能与PA6色母通用吗| 精品久久久噜噜噜久久久| 色偷偷88888欧美精品久久久| 一区二区三区中文字幕| 国产女主播高潮在线播放| 欧美人妻兽交V1DE0S| 亚洲精品无码永久电影在线| 风间由美性色一区二区三区| 乱世桃花免费观看完整版高清| 国产在线观看无遮挡无码AⅤ多人| 九妹免费观看完整版| 日本少妇人妻XXXXⅩ18欧美| 永久黄网站色视频免费品善网| 人人爽亚洲AⅤ人人爽AV人人片| 亚洲AV无码成人网站国产网站| 不收费的十大免费好用的软件| 久久久久久精品免费免费WER| 婷婷久久久亚洲欧洲日产国码AV| AE射频电源成色| 久久精品无码一区二区三区免费 | 中文无码AV一区二区三区| 国产婷婷内射精品1区| 日本久久久久久久久精品 | 疯狂做爰XXXⅩ高潮69短| 欧美黑人一区二区| 野花日本免费完整版高清版8 | 亚洲AV无码成人网站在线观看 | 97人人澡人人爽人人模亚洲| 久久高清超碰AV热热久久| 无码人妻久久久一区二区三区免费| 宝贝腿开大一点你真湿H | 手机免费AV片在线播放| BGMBGMBGM老太太HD| 久久久亚洲熟妇熟女ⅩXXXH| 亚洲A成人片在线播放| 国产精品久久这里只有精品| 国外精产品W灬源码16| 图片区小说区AV区| 成熟丰满熟妇偷拍XXXXX| 欧美日韩中文字幕视频不卡一二区| 一区二区三区欧美| 九月婷婷人人澡人人添人人爽| 亚洲AV成人精品五区| 国产成人无码A区在线观看视频免 国产成人无码A区在线观看视频A 国产成人无码A区在线观看视频 | 偷窥少妇久久久久久久久| 苍井空张开腿实干12次| 欧美日韩一区精品视频一区二| 中文成人无字幕乱码精品区| 久久久久人妻精品一区三寸| 亚洲乱亚洲乱妇无码| 国外AV无码精品国产精品| 小浪货水多奶大被领导 | JAVAPARSER乱偷| 妺妺窝人体色WWW看人体| 伊人久久无码大香线蕉综合 | 亚洲乱码在线卡一卡二卡新区| 果冻传媒播放观看免费| 亚洲AV秘 无码一区二黑人| 国产乱人伦偷精品视频免| 无码人妻AⅤ一区二区三区水密桃| 国产SM鞭打折磨调教视频| 熟妇高潮喷沈阳45熟妇高潮喷 | 少妇人妻偷人精品无码视频| 厨房里抱着岳丰满大屁股| 日韩精品一区二区三区在线观看| 波多野结衣乳巨码无在线| 日本人妻丰满大屁股a v| 超碰97人人做人人爱可以下载| 日本乱码卡一卡新区入口| 厨房里的激战2李明人物介绍| 日韩AV无卡无码午夜观看| 粗大在少妇体内进进出出 | 丰满人妻被黑人连续中出| 精品一区二区三区影院在线午夜| 亚洲Av无码一区二区三区大黄瓜 | 亚洲熟妇成人精品二区蜜臀| 久久久久久精品天堂无码中文字幕| 亚洲中文字幕爆乳人妻| 老师你的好软水好多的时候图片| 中文无码久久精品| 欧美日韩精品一区二区在线视频 | 在线日产精品一区| 免费观看电视剧全集在线播放 | 国产真实乱对白精彩| 亚洲国产AⅤ精品一区二区百度| 精品无码人妻一区二区免费蜜桃| 一本一道波多野结衣一区| 免费人成视频X8X8入口APP| JAPAN丰满少妇VIDEOS| 日韩精品久久久久久免费 | XXX少妇厨房XXX乱| 日韩欧美成人免费观看| 国产精品毛片VA一区二区三区| 亚洲AV无码一区二区乱孑伦AS| 久久久精品456亚洲影院| 中文成人无码精品久久久不卡| 欧美熟妇精品一区二区三区| 福利乱码卡一卡二卡新区| 午夜三级A三级三点窝| 精选AV种子无码专区| 中文字幕日韩人妻| 日本黑人乱偷人妻中文字幕 | 性XXXX18免费观看视频| 久久精品国产自清天天线| 18SCHOOL第一次破苞摘花| 日产中文字幕在线精品一区| 国产清纯美女爆白浆视频| 亚洲一区精品无码| 欧美性爱一区二区三区| 国产成人一区二区三区在线 | 精品人妻中文AV一区二区三区 | 野花香视频免费观看| 欧美精品天堂一区二区不卡| 丰满熟妇人妻中文字幕| 亚洲国产成人一区二区三区| 男人女人免费啪啪观看| 国产AV无码专区亚洲A∨毛片| 亚洲狠狠婷婷综合久久蜜芽| 欧美成年黄网站色视频| 国产成人亚洲综合A∨婷婷图片| 亚洲日韩乱码中文无码蜜桃臀| 欧美老人巨大XXXX做受视频| 国产精品久久国产三级国| 亚洲最大AV无码网址| 日本无遮挡真人祼交视频| 极品粉嫩国产18尤物在线观看| 4444亚洲人成无码网在线观看| 上边一面亲下边一面膜的作用| 精品久久一区二区乱码| А√天堂资源地址在线| 亚洲AV无码成人片在线观看 | 亚欧洲乱码视频一二三区| 噜噜噜亚洲色成人网站∨| 国产AⅤ无码专区亚洲AV综合网| 亚洲熟女成年三级中文字幕| 日本熟妇色XXXXX| 久久国产精品免费一区| 大香伊蕉在人线国产2020年|