GoFrame|GoFrame glist 基础使用和自定义遍历

目录

  • 基础概念
  • 基本使用
    • 打印结果
  • glist链表遍历
    • 打印结果
  • 小技巧
    • join
    • 序列化和反序列化
  • 总结

    基础概念 GoFrame框架(下文简称gf)提供的数据类型,比如:字典gmap、数组garray、集合gset、队列gqueue、树形结构gtree、链表glist都是支持设置并发安全开关的。
    支持设置并发安全开关这也是gf提供的常用数据类型和原生数据类型非常重要的区别
    今天和大家分享gf框架的glist详解:

    基本使用 glist的使用场景是:双向链表
    • 通过PushBack向链表尾部插入数据
    • 通过PushFront向链表头部插入数据
    • 通过InsertBefore向指定位置前插入数据
    • 通过InsertAfter向指定位置后插入数据
    • 通过PopBacks从尾部取出数据
    • 通过PopFronts从头部取出数据
    package mainimport ("github.com/gogf/gf/container/glist""github.com/gogf/gf/frame/g")func main() {//带并发安全开关的双向链表l := glist.New()//push方法l.PushBack(1)l.PushBack(2)e := l.PushFront(0)g.Dump("l的值:", l) //l的值:"[0,1,2]"//insert添加方法l.InsertBefore(e, -1)g.Dump("insert之后的值:", l) //insert之后的值:"[-1,0,1,2]"l.InsertAfter(e, 0.2)g.Dump("InsertAfter之后:", l) //InsertAfter之后:"[-1,0,0.2,1,2]"//popl.PopBacks(1)g.Dump("PopBacks之后:", l) //PopBacks之后:"[-1,0,0.2,1]" 即弹出了最后一个值l.PopFronts(1)g.Dump("PopFronts之后:", l) //PopFronts之后:"[0,0.2,1]" 即弹出了最前面的一个值}



    打印结果
    GoFrame|GoFrame glist 基础使用和自定义遍历
    文章图片


    glist链表遍历 链表的遍历是常用的场景
    • 我们可以通过原生方法IteratorAsc实现正序遍历
    • 可以通过原生方法IteratorDesc实现倒序遍历
    当然了,我们也可以自定义遍历规则 比如我们可以通过读锁和写锁遍历一个并发安全的链表 下方代码块标注了明确的注释。
    package mainimport ("container/list""fmt""github.com/gogf/gf/container/garray""github.com/gogf/gf/container/glist")func main() {l := glist.NewFrom(garray.NewArrayRange(0, 10, 1).Slice(), true)// 正序遍历l.IteratorAsc(func(e *glist.Element) bool {fmt.Print(e.Value) //结果:012345678910return true})fmt.Println()// 倒序遍历l.IteratorDesc(func(e *glist.Element) bool {fmt.Print(e.Value) //结果:109876543210return true})fmt.Println()//自定义方法 实现正序遍历l.RLockFunc(func(list *list.List) {if list.Len() > 0 {for i, e := 0, list.Front(); i < list.Len(); i, e = i+1, e.Next() {fmt.Print(e.Value) //012345678910}}})fmt.Println()// 自定义方法 实现倒序遍历l.RLockFunc(func(list *list.List) {if list.Len() > 0 {for i, e := 0, list.Back(); i < list.Len(); i, e = i+1, e.Prev() {fmt.Print(e.Value) //109876543210}}})fmt.Println()}

    打印结果
    GoFrame|GoFrame glist 基础使用和自定义遍历
    文章图片


    小技巧 下面分享一些我在使用中的小技巧

    join
    通过join处理成逗号分隔的字符串
    var l glist.Listl.PushBacks(g.Slice{"a", "b", "c"})fmt.Println(l.Join(","))

    打印结果
    a,b,c


    序列化和反序列化
    呼应一下开头提到的:支持设置并发安全开关是gf提供的常用数据类型和原生数据类型非常重要的区别
    gf提供的数据类型都支持序列化和反序列化就是另外一个重要特点了。

    总结 通过这篇文章,我们了解到:
    • gf框架提供的数据结构,比如:字典gmap、数组garray、集合gset、队列gqueue、树形结构gtree、链表glist都是支持设置并发安全开关的;而且都支持序列化和反序列化,实现了标准库json数据格式的序列化/反序列化接口。
    • 学习到了glist的基础使用以及如何自定义遍历取值。
    【GoFrame|GoFrame glist 基础使用和自定义遍历】以上就是GoFrame glist 基础使用和自定义遍历的详细内容,更多关于GoFrame glist自定义遍历的资料请关注脚本之家其它相关文章!

      推荐阅读