iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > GO >GoFrame glist 基础使用和自定义遍历
  • 860
分享到

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

2024-04-02 19:04:59 860人浏览 八月长安
摘要

目录基础概念基本使用打印结果glist链表遍历打印结果小技巧join序列化和反序列化总结基础概念 GoFrame框架(下文简称gf)提供的数据类型,比如:字典gmap、数组garra

基础概念

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自定义遍历的资料请关注编程网其它相关文章!

您可能感兴趣的文档:

--结束END--

本文标题: GoFrame glist 基础使用和自定义遍历

本文链接: https://www.lsjlt.com/news/151038.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • GoFrame glist 基础使用和自定义遍历
    目录基础概念基本使用打印结果glist链表遍历打印结果小技巧join序列化和反序列化总结基础概念 GoFrame框架(下文简称gf)提供的数据类型,比如:字典gmap、数组garra...
    99+
    2024-04-02
  • GoFrame glist怎么使用和自定义遍历
    本文小编为大家详细介绍“GoFrame glist怎么使用和自定义遍历”,内容详细,步骤清晰,细节处理妥当,希望这篇“GoFrame glist怎么使用和自定义遍历”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一...
    99+
    2023-07-02
  • 【Python基础】- 自定义函数和匿名函数
      🤵‍♂️ 个人主页:@艾派森的个人主页 ✍🏻作者简介:Python学习者 🐋 希望大家多多支持,我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 💬...
    99+
    2023-09-01
    python 开发语言
  • Python基础之类的定义和使用详解
    目录1、定义类2、创建类的实例3、“魔术”方法——_ init ()4、创建类的成员并访问4.1、创建实例方法并访问4.2、创建数据成...
    99+
    2024-04-02
  • 自定义视图View绘图基础之Path的使用
    目录使用Path绘制线一、我们这里绘制了7条线来分别介绍上面的几种子类都有什么用二、不难看出其中每条线的属性和样式不一样,我在上面有 了很详细的讲解。三、xxxTo()方法绘制(本章...
    99+
    2023-05-14
    自定义视图 自定义View 自定义视图 Path使用
  • python基础之函数的定义和调用
    # 第一题 # 写函数,接受n个数字,求这些参数数字的和 def sumFunc(*args): # 处理接受的数据 result=0 for item...
    99+
    2024-04-02
  • Django零基础入门之自定义标签及模板中的使用
    目录自定义标签:第一部分(1)视图函数编写:(2)编写模板文件:(3)自定义标签实现:(4)效果展示:第二部分(1)视图函数编写:(2)编写模板文件:(3)自定义标签实现:第三部分紧...
    99+
    2024-04-02
  • Vue自定义日历小控件使用方法详解
    本文实例为大家分享了Vue自定义日历小控件的具体代码,供大家参考,具体内容如下 废话少说,先上效果图: 可以在效果图中看到,选择不同的月份的时候当月天数与星期几都是一一对应,非当月...
    99+
    2024-04-02
  • Django零基础入门之自定义过滤器及模板中的使用
    目录引言自定义过滤器(1)首先(2)内置过滤器lower的使用:(3)自定义过滤器的使用:(4)模板中使用自定义过滤器:(5)效果展示:引言 分析Django内置的模板过滤器: 通...
    99+
    2024-04-02
  • Java基础教程之数组的定义与使用
    目录一.数组的基本概念二.数组的声明三.数组的创建及初始化1.数组的创建2.数组的初始化四.访问数组元素 五.for each 循环 六.数组的拷贝 七.数组排序 八.二维数组 总结...
    99+
    2024-04-02
  • Java中和使用自定义标签
    这篇文章将为大家详细讲解有关Java中和使用自定义标签,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。简单例子实现一个标签分为两步:(1)继承SimpleTagSupport或TagSuppo...
    99+
    2023-05-30
    java
  • vue全局自定义指令和局部自定义指令的使用
    目录局部自定义指令(只针对组件内的元素)定义全局自定义指令自定义指令的钩子函数自定义指令钩子函数的参数例子除了默认设置的核心指令 (v-model 和 v-show),Vue 也允许...
    99+
    2024-04-02
  • Vue.js自定义指令的基本使用详情
    目录函数式对象式使用时的一些坑总结函数式 需求1:定义一个v-big指令,和v-text功能类似,但会把绑定的数值放大10倍 <div id="root"> &l...
    99+
    2024-04-02
  • 如何使用vue封装一个自定义日历组件
    本文小编为大家详细介绍“如何使用vue封装一个自定义日历组件”,内容详细,步骤清晰,细节处理妥当,希望这篇“如何使用vue封装一个自定义日历组件”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。核心代码实现1、梳理思...
    99+
    2023-07-05
  • Java基础入门篇之如何使用面向对象和类的定义
    这篇文章主要讲解了“Java基础入门篇之如何使用面向对象和类的定义”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java基础入门篇之如何使用面向对象和类的定义”吧!一、面向对象面向对象是在程...
    99+
    2023-06-15
  • 如何使用CDPATH为linux cd命令定义基础目录
    这篇文章主要讲解了“如何使用CDPATH为linux cd命令定义基础目录”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何使用CDPATH为linux cd命令定义基础目录”吧!如果你经常...
    99+
    2023-06-17
  • Java基础之Bean的创建、定位和使用
    目录一、前言二、自动装配Bean2.1 注册Bean2.2 使用Bean三、手动装配3.1 Java类四、XML文件五、导入配置5.1 Java类六、导入到XML一、前言 Bean是...
    99+
    2024-04-02
  • 详解怎么使用vue封装一个自定义日历组件
    执行这个方法之后,此时calendarProps的值为:4、根据日历属性生成日历日期的数据当我们已经知道本月第一天对应的周几索引值、本月一共有多少天和上个月一共有多少天这三个核心数据之后,就可以开始生成对应的日历数据了。思路如下:由于大部分...
    99+
    2023-05-14
    Vue.js 数据可视化 前端
  • vue中自定义指令(directive)的基本使用方法
    目录前言正文1.全局注册2.局部注册3.钩子函数及参数设置4.灵活用法(1)动态指令参数(2)函数简写方式(3)对象字面量方式5.使用场景写在最后前言 在vue项目中我们经常使用到 ...
    99+
    2024-04-02
  • vue定义私有过滤器和基本使用
    私有过滤器和全局过滤器的方法和概念都相同,只是一个是全局都可以调用,而私有的只有自己可以调用, 全局过滤器点这里全局过滤器 使用方法也和全局过滤器一致,只是定义的地方不同 全局过...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作