我的编程空间,编程开发者的网络收藏夹
学习永远不晚

GoFrame框架garray对比PHP的array有什么优势

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

GoFrame框架garray对比PHP的array有什么优势

今天小编给大家分享一下GoFrame框架garray对比PHP的array有什么优势的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

garray特点简介

  • garray支持int/string/interface{}三种常用的数据类型。

  • garray支持普通数组和排序数组,普通数组的结构体名称定义为Array格式,排序数组的结构体名称定义为SortedArray格式,如下:Array, intArray, StrArray,SortedArray, SortedIntArray, SortedStrArray

  • 其中排序数组SortedArray,需要给定排序比较方法,在工具包gutil中也定义了很多ComparatorXXX的比较方法,用起来很方便。当然也支持自定义排序方式。

基本使用

package mainimport (   "fmt"   "github.com/gogf/gf/container/garray")func main() {   //创建并发安全的int型数组   a := garray.NewIntArray(true)   //添加数组项   for i := 0; i < 10; i++ {      a.Append(i)   }   // 打印结果:   fmt.Println(a) //"[0,1,2,3,4,5,6,7,8,9]"   fmt.Println("数组长度:", a.Len())   fmt.Println("数组的值:", a.Slice())   fmt.Println((a.Get(5))) //根据索引取值 返回值和是否取到了值 5 true   // 在指定索引前后插入值   _ = a.InsertAfter(9, 10)   _ = a.InsertBefore(0, -1)   fmt.Println(a.Slice())   // 搜索数据项,返回对应的索引   fmt.Println("搜索值,返回对应索引:", a.Search(5))   // 删除   a.Remove(0)   fmt.Println(a.Slice())   // 并发安全 写锁操作   a.LockFunc(func(array []int) {      //将最后一项的值改为100      array[len(array)-1] = 100   })   fmt.Println(a) //"[0,1,2,3,4,5,6,7,8,9,100]"      // 并发安全 读锁操作   a.RLockFunc(func(array []int) {      fmt.Println(array[len(array)-1]) //100   })   // 清空数组   a.Clear()   fmt.Println("清空数组之后:", a.Slice())}

打印结果

GoFrame框架garray对比PHP的array有什么优势

数组出栈

  • 数组出栈使用Pop*关键字

  • 数组可以按顺序出栈,而gf提供的另外一个数据类型gmap的pop*方法是随机出栈 (关注我,会在后续的文章中更新说明)

  • garray中随机出栈,我们可以使用rand()或者popRand()

package mainimport (   "fmt"   "github.com/gogf/gf/container/garray"   "github.com/gogf/gf/frame/g")//数组出栈 pop 数组可以按顺序出栈 map的pop是随机出栈func main() {   a := garray.NewFrom([]interface{}{1, 2, 3, 4, 5, 6})   fmt.Println(a.PopLeft())   fmt.Println(a.PopLefts(2))   fmt.Println(a.PopRight())   fmt.Println(a.PopRights(2))   fmt.Println(a) //全部出栈后 数组为空      // 有什么办法能像map一样随机出栈呢? 在garray中我们使用rand()或者popRand()   a1 := garray.NewFrom(g.Slice{1, 2, 3, 4, 5, 6, 7})   fmt.Println("----------")   fmt.Println(a1.Rand())      //随机取值   fmt.Println(a1.PopRands(2)) //随机出栈   fmt.Println(a1)}

包含判断

  • 注意:Contains()是区分大小写

  • 空值过滤使用:FilterEmpty

  • nil过滤使用:FilterNil

package mainimport (   "github.com/gogf/gf/container/garray"   "github.com/gogf/gf/frame/g")//包含 contains 区分大小写func main() {   var a garray.Array   a.Append("a")   g.Dump(a.Contains("a")) //true   g.Dump(a.Contains("A")) //false   // 空值过滤   a1 := garray.NewFrom([]interface{}{0, 1, "2", nil, false, g.Slice{}, "王中阳"})   a2 := garray.NewFrom([]interface{}{0, 1, "2", nil, false, g.Slice{}, "王中阳"})   g.Dump("empty过滤:", a1.FilterEmpty()) //empty过滤:"[1,2,"王中阳"]"   g.Dump("nil过滤:", a2.FilterNil())     //nil过滤:"[0,1,2,"false","[]","王中阳"]"   a3 := garray.NewFrom([]interface{}{1, 2, 3, 4, 5, 6, 7})   g.Dump("数组翻转:", a3.Reverse())   g.Dump("数组随机排序:", a3.Shuffle())}

打印结果

GoFrame框架garray对比PHP的array有什么优势

排序数组

  • 我们可以自定义NewSortedArray的排序规则,以实现是升序数组还是降序数组;

  • 排序数组还有唯一性校验的功能:garray.SetUnique(true)

  • gf框架的gutil工具包定义好了常用的排序规则

package mainimport (   "github.com/gogf/gf/container/garray"   "github.com/gogf/gf/frame/g"   "github.com/gogf/gf/util/gutil")//我们可以自定义NewSortedArray的排序规则,以实现是升序数组还是降序数组;排序数组还有唯一性校验的功能func main() {   //自定义排序数组:降序排列   a := garray.NewSortedArray(func(a, b interface{}) int {      if a.(int) < b.(int) {         return 1      }      if a.(int) > b.(int) {         return -1      }      return 0   })   // 排序规格可以使用gutil中定义好的   a.Add(2) //数组的赋值用add map的赋值用set   a.Add(1)   a.Add(3)   g.Dump("a:", a) //打印结果:"[3,2,1]"   //升序数组   a2 := garray.NewSortedArray(gutil.ComparatorInt)   a2.Add(2)   a2.Add(1)   a2.Add(3)   g.Dump("a2:", a2)   // 添加重复元素   a2.Add(2)   g.Dump("a2添加重复元素后:", a2)   a2.SetUnique(true) //设置不允许重复元素   g.Dump("a2设置不允许重复元素之后:", a2)}

打印结果

GoFrame框架garray对比PHP的array有什么优势

join、chunk、merge

  • 数据项串联是相当常用的场景,比如多个id以逗号分隔入库存储,我们使用join关键字即可

  • garray支持将一个数组拆分成指定数量的二维数组,使用chunk关键字

  • garray支持使用merge关键字合并数组

package mainimport (   "fmt"   "github.com/gogf/gf/container/garray"   "github.com/gogf/gf/frame/g")func main() {   //join 串联 常用于逗号分割   a := garray.NewFrom(g.Slice{1, 2, 3, 4, 5})   fmt.Println("串联结果:", a.Join("_")) //1_2_3_4_5   //数组拆分 chunk   fmt.Println("数组拆分:", a.Chunk(2)) //[[1 2] [3 4] [5]]   // 数组合并 可以合并数组 也可以合并slice(原生切片和g.Slice都支持)   a1 := garray.NewFrom(g.Slice{1, 2})   a2 := garray.NewFrom(g.Slice{3, 4})   s1 := g.Slice{5, 6}   s2 := []string{"7", "8"}   s3 := []int{9, 0}   a1.Merge(a2)   a1.Merge(s1)   a1.Merge(s2)   a1.Merge(s3)   fmt.Println("合并结果:", a1) // [1,2,3,4,5,6,7,8,9,0]}

打印结果:

GoFrame框架garray对比PHP的array有什么优势

遍历

  • garray天然支持升序遍历和降序遍历

  • 函数Iterator()是IteratorAsc()的别名

package mainimport (   "fmt"   "github.com/gogf/gf/container/garray"   "github.com/gogf/gf/frame/g")//数组遍历 iteratefunc main() {   a := garray.NewFrom(g.Slice{"a", "b", "c"})   fmt.Println("升序遍历结果")   a.Iterator(func(k int, v interface{}) bool {      fmt.Printf("%v,%v \n", k, v)      return true   })   // 数组倒序遍历   fmt.Println("倒序遍历结果:")   a.IteratorDesc(func(k int, v interface{}) bool {      fmt.Printf("%v,%v \n", k, v)      return true   })}

打印结果

GoFrame框架garray对比PHP的array有什么优势

遍历修改 walk函数

非常好用!!!

看到这个方法,更坚信了我一个观点:GF的作者一定写了几年PHP。

package mainimport (   "github.com/gogf/gf/container/garray"   "github.com/gogf/gf/frame/g"   "github.com/gogf/gf/util/gconv")//walk遍历修改 修改数组的值func main() {   var a garray.Array   tables := g.Slice{"user", "user_detail"}   a.Append(tables...)   prefix := "gf_"   a.Walk(func(value interface{}) interface{} {      return prefix + gconv.String(value)   })   g.Dump(a)}

打印结果

GoFrame框架garray对比PHP的array有什么优势

序列化和反序列化

这里重点提一下:gf container容器包下的对象都实现对原生json包的支持,都支持序列化和反序列化。

打印结果

GoFrame框架garray对比PHP的array有什么优势

以上就是“GoFrame框架garray对比PHP的array有什么优势”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注编程网行业资讯频道。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

GoFrame框架garray对比PHP的array有什么优势

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

下载Word文档

猜你喜欢

GoFrame框架garray对比PHP的array有什么优势

今天小编给大家分享一下GoFrame框架garray对比PHP的array有什么优势的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一
2023-07-02

PHP CodeIgniter框架与其他框架的对比:优势、劣势与最佳实践

:PHP CodeIgniter框架因其轻量级、易学习和快速开发而受到开发人员的欢迎。本文将比较CodeIgniter与其他流行框架的优势、劣势和最佳实践,帮助您选择最适合的框架。
PHP CodeIgniter框架与其他框架的对比:优势、劣势与最佳实践
2024-02-07

PHP 框架对比:Laravel 和 CodeIgniter 的关键区别是什么?

laravel 和 codeigniter 是 php 中流行的框架,分别以其易用性(laravel)和轻量级性(codeigniter)著称。主要区别在于:1. 路由系统:laravel 使用表达式路由,而 codeigniter 使用传
PHP 框架对比:Laravel 和 CodeIgniter 的关键区别是什么?
2024-05-12

Learun这类的软件框架相较于其他类型的优势有什么

本篇文章给大家分享的是有关Learun这类的软件框架相较于其他类型的优势有什么,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。我们先来了解一下什么是框架在软件工程中,框架被定义为
2023-06-03

Golang函数的优势对比其他语言中的函数有什么特别的?

go 函数优势:强制执行类型安全,防止常见编程错误。支持闭包和高阶函数等函数式编程特性,提高代码可维护性和可测试性。内置对并发的支持,显著提高应用程序性能和响应能力。使用 error 值报告错误,提供更一致的错误处理机制。Go 函数的优势
Golang函数的优势对比其他语言中的函数有什么特别的?
2024-04-11

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录