GoFrame glist 基础使用和自定义遍历
基础概念
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]" 即弹出了最前面的一个值 } 复制代码
打印结果
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() } 复制代码
打印结果
小技巧
下面分享一些我在使用中的小技巧
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的基础使用以及如何自定义遍历取值。
以上就是GoFrame glist 基础使用和自定义遍历的详细内容,更多关于GoFrame glist自定义遍历的资料请关注猪先飞其它相关文章!
原文出处:https://juejin.cn/post/7101515355062796296
相关文章
- 这篇文章主要给大家介绍了关于C#创建自定义控件及添加自定义属性和事件使用的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用C#具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧...2020-06-25
- 本文实例讲述了JS实现自定义简单网页软键盘效果。分享给大家供大家参考,具体如下:这是一款自定义的简单点的网页软键盘,没有使用任何控件,仅是为了练习JavaScript编写水平,安全性方面没有过多考虑,有顾虑的可以不用,目的是学...2015-11-08
- 为了增强android应用的用户体验,我们可以在一些Button按钮上自定义动态的设置一些样式,比如交互时改变字体、颜色、背景图等。 今天来看一个通过重写Button来动态实...2016-09-20
- 下面小编就为大家带来一篇js遍历json的key和value的实例。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2017-01-26
- 下面我们来看一篇关于Android自定义WebView网络视频播放控件开发例子,这个文章写得非常的不错下面给各位共享一下吧。 因为业务需要,以下代码均以Youtube网站在线视...2016-10-02
- 自定义一个jquery模态窗口插件,将它集成到现有平台框架中时,它只能在mainFrame窗口中显示,无法在顶层窗口显示. 解决这个问题的办法: 通过以下代码就可能实现在顶层窗口弹窗 复制代码 代码如下: $(window.top.documen...2014-05-31
- 这篇文章主要介绍了自定义feignClient的常见坑及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2021-10-20
- 今天小编就为大家分享一篇pytorch 自定义卷积核进行卷积操作方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-05-06
PHP YII框架开发小技巧之模型(models)中rules自定义验证规则
YII的models中的rules部分是一些表单的验证规则,对于表单验证十分有用,在相应的视图(views)里面添加了表单,在表单被提交之前程序都会自动先来这里面的规则里验证,只有通过对其有效的限制规则后才能被提交,可以很有效地保证...2015-11-24- 这篇文章主要介绍了c# 遍历 Dictionary的四种方式,帮助大家更好的理解和使用c#,感兴趣的朋友可以了解下...2020-12-08
- 这篇文章主要介绍了jquery自定义插件开发之window的实现过程的相关资料,需要的朋友可以参考下...2016-05-09
JavaScript中的数组遍历forEach()与map()方法以及兼容写法介绍
下面小编就为大家带来一篇JavaScript中的数组遍历forEach()与map()方法以及兼容写法介绍。小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2016-05-20- 下面就为大家带来一篇jquery对Json的各种遍历方法总结(必看篇)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2016-10-02
jQuery遍历DOM的父级元素、子级元素和同级元素的方法总结
借助jQuery我们可以轻松地堆DOM元素进行向上、向下遍历以及同级的遍历,本文我们即来整理jQuery遍历DOM的父级元素、子级元素和同级元素的方法总结:...2016-07-25- 这篇文章主要介绍了C# 遍历datatable字段名和value的案例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-01-19
- 这篇文章主要介绍了C#自定义事件监听实现方法,涉及C#事件监听的实现技巧,具有一定参考借鉴价值,需要的朋友可以参考下...2020-06-25
- 这篇文章主要为大家详细介绍了JS中的二叉树遍历,何为二叉树,什么是二叉树的遍历,感兴趣的小伙伴们可以参考一下...2016-03-22
- 这篇文章主要介绍了Vue 组件复用多次自定义参数操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-07-27
- 这篇文章主要介绍了Xml中使用foreach遍历对象实现代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-12-04
- 这篇文章主要给大家介绍了关于JavaScript循环遍历的24个方法,文中对每种方法都给出了详细的实例代码,方便大家理解学习,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2021-09-15