大佬教程收集整理的这篇文章主要介绍了golang提供的List,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
作为现代10后语言的golang(12年正式发布)。Golang的标准库提供了高级的数据结构List。具体在包container/list
。该包里主要有两个数据结构组成:“Element”、“List”。其中“Element”相当于CPP里面的"iterator",其有Prev和Next方法用于得到前一个或者下一个迭代器,迭代器的间接引用直接使用其成员Value。
l:=list.New() l.PushBACk("one") l.PushBACk(2) fmt.Println(l)
&{{0x2081a21b00x2081a21e0<nil>?reflect.Value?}2}
这里具体的0x数据可能会变动,其实际记录的是对象的地址,但是最后的“2”不会变动,其表示当前的list对象里面有两个元素。
这里我们通过使用list.New()
创建一个list对象,然后调用该对象的PushBACk()
方法向list对象中插入一个元素。这里我们发现神奇的一个现象:在CPP里面,list的成员的必须是同一个类型的,但是我们的Golang却允许list中插入任意类型的成员。这个很容易让我们想到了python的特性。这里我们可以通过源码了解到Element中其实存储的是一个interface{}
成员,从而支持任意成员的特性:
typeElementstruct{ //ThevaluestoredwiththiSELER_820_11845@ent. Valueinterface{} //containsfilteredorunexportedfields }
上面的例子,仅仅用fmt.Println看到了list得简单的信息,那么若要遍历整个list怎么操作呢?来看代码:
l:=list.New() l.PushBACk("one") l.PushBACk(2) l.PushBACk("three") foriter:=l.Front();iter!=nil;iter=iter.Next(){ fmt.Println("item:",iter.value) }
item:one item:2 item:three
这里,我们定义了一个迭代器变量iter,其为Element类型,通过调用list的Front()
函数,可以得到list的第一个对象,若list为空,则得到nil。同样的通过调用调用list的BACk()
可以得到最后一个对象的迭代器。在for语句中,我们用list的Next()
方法得到当前迭代器的下一个元素的迭代器,若没有元素了,则返回nil。因此我们用iter !=nil
作为循环结束条件。上面说了。通过引用迭代器的Value
成员,可以实现对其内存储元素的间接应用。
除了可以通过上面的函数得到单个元素外,我们还可以通过list的Len()
函数获得其内元素的个数。美中不足的是Golang的List没有提供python中得通过索引引用元素的功能,也没有index
或者at
类似的接口
在上面的例子中,我们已经演示了怎么向list中添加元素。PushBACk()
会将新元素添加到list的尾部。除此之外,还有PushFront()
可以将元素插入到list得首部。InsertAfter()
能将元素插入到list中指定元素的后面,InsertBefor
能将元素插入到list中指定的元素的前面。
插入后如何删除元素呢?通过list的Remove()
函数可以删除指定的元素。与Insert对应的@H_854_18@moveAfter()、@H_854_18@moveBefore(),可以list中指定元素的后面或者前面的元素。
typeQueuestruct{ data*list.List } funcNewQueue()*Queue{ q:=new(QueuE) q.data=list.New() returnq } func(q*QueuE)Enqueue(vinterface{}){ q.data.PushBACk(v) } func(q*QueuE)Dequeue()interface{}{ iter:=q.data.Front() v:=iter.Value q.data.Remove(iter) returnv } func(q*QueuE)Dump(){ foriter:=q.data.Front();iter!=nil;iter=iter.Next(){ fmt.Println("item:",iter.value) } } funcmain(){ q:=NewQueue() q.Enqueue("one") q.Enqueue("two") q.Dump() v:=q.Dequeue() fmt.Println("v:",v) q.Dump() }
我们可以看到结果为:
item:one item:two v:one item:two
最后。如果我们想清空list。可以调用其Init()
接口。
以上是大佬教程为你收集整理的golang提供的List全部内容,希望文章能够帮你解决golang提供的List所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。