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

作者:王中阳Go 时间:2024-05-28 15:23:26 

基础概念

GoFrame框架(下文简称gf)提供的数据类型,比如:字典gmap、数组garray、集合gset、队列gqueue、树形结构gtree、链表glist都是支持设置并发安全开关的。

支持设置并发安全开关这也是gf提供的常用数据类型和原生数据类型非常重要的区别

今天和大家分享gf框架的glist详解:

基本使用

glist的使用场景是:双向链表

  • 通过PushBack向链表尾部插入数据

  • 通过PushFront向链表头部插入数据

  • 通过InsertBefore向指定位置前插入数据

  • 通过InsertAfter向指定位置后插入数据

  • 通过PopBacks从尾部取出数据

  • 通过PopFronts从头部取出数据

package main
import (
  "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]"
  //pop
  l.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 glist 基础使用和自定义遍历

glist链表遍历

链表的遍历是常用的场景

  • 我们可以通过原生方法IteratorAsc实现正序遍历

  • 可以通过原生方法IteratorDesc实现倒序遍历

当然了,我们也可以自定义遍历规则 比如我们可以通过读锁和写锁遍历一个并发安全的链表 下方代码块标注了明确的注释。

package main
import (
  "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) //结果:012345678910
     return true
  })
  fmt.Println()
  // 倒序遍历
  l.IteratorDesc(func(e *glist.Element) bool {
     fmt.Print(e.Value) //结果:109876543210
     return 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 glist 基础使用和自定义遍历

小技巧

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

join

通过join处理成逗号分隔的字符串

var l glist.List
   l.PushBacks(g.Slice{"a", "b", "c"})
   fmt.Println(l.Join(","))

打印结果

a,b,c

序列化和反序列化

呼应一下开头提到的:支持设置并发安全开关是gf提供的常用数据类型和原生数据类型非常重要的区别

gf提供的数据类型都支持序列化和反序列化就是另外一个重要特点了。

  • gf框架提供的数据结构,比如:字典gmap、数组garray、集合gset、队列gqueue、树形结构gtree、链表glist都是支持设置并发安全开关的;而且都支持序列化和反序列化,实现了标准库json数据格式的序列化/反序列化接口。

  • 学习到了glist的基础使用以及如何自定义遍历取值。

来源:https://juejin.cn/post/7101515355062796296

标签:GoFrame,glist,自定义,遍历
0
投稿

猜你喜欢

  • pyspark创建DataFrame的几种方法

    2023-01-09 01:30:53
  • HTTP服务压力测试工具及相关术语讲解

    2024-05-08 10:23:31
  • Python装饰器的练习题

    2023-12-07 13:11:48
  • 详解Python遍历列表时删除元素的正确做法

    2023-04-06 18:42:53
  • Python搭建HTTP服务过程图解

    2023-08-08 22:11:54
  • python遍历文件目录、批量处理同类文件

    2021-10-19 14:58:12
  • PHP xpath()函数讲解

    2023-06-04 07:03:38
  • 详解MySQL的sql_mode查询与设置

    2024-01-14 08:30:20
  • django使用LDAP验证的方法示例

    2022-11-22 12:54:47
  • Python实现url长短链接的转换

    2022-07-21 14:05:58
  • JS出现404错误原理及解决方案

    2024-04-28 09:41:26
  • 如何高效使用Python字典的方法详解

    2021-07-26 04:29:03
  • Python Web程序搭建简单的Web服务器

    2022-08-07 12:33:04
  • 利用JAVA反射,读取数据库表名,自动生成对应实体类的操作

    2024-01-14 23:58:29
  • Python 找到列表中满足某些条件的元素方法

    2021-12-22 13:29:53
  • OpenCV学习之图像加噪与滤波的实现详解

    2022-09-20 04:40:57
  • PL/SQL 类型格式转换

    2009-02-26 11:07:00
  • 网页中英文混排行高不等问题

    2008-08-26 17:03:00
  • Google投放广告的js的分析

    2008-07-15 11:34:00
  • DES加密解密算法之python实现版(图文并茂)

    2023-08-15 01:55:11
  • asp之家 网络编程 m.aspxhome.com