Go 语言函数式编程系列(十二) —— 数据类型篇:字典类型的遍历与排序

遍历字典 我们可以像遍历数据那样对字段类型数据进行遍历: testMap := map[string]int{ "one": 1, "two": 2, "three": 3, } for key, value := range testMap { fmt.Println(key, value) } 这种遍历模式和我们在 PHP 中通过 foreach 对...

Leetcode基础刷题之PHP解析(14. Longest Common Prefix)

对于这一类题目,肯定都需要遍历对比一下,先来一种常规的思路,因为只要给定数组中元素当前位置有一个不同,那么公共字符串前缀就是从0截取到当前位置的上一个位置。所以我先随便拿出一个参照点(数组第一个元素),第一层遍历元素中的值,嵌套循环中遍历数组之后的元素,然后进行对比判断。最后得出结果。...

基于 Swoole 构建高性能 Laravel 应用系列 —— 基于 Swoole 实现协程篇(一):基本概念和底层原理

协程是什么 协程可以理解为纯用户态的线程,其通过协作而不是抢占来进行切换,相对于进程或者线程,协程所有的操作都可以在用户态完成,创建和切换的消耗更低,Swoole 可以为每一个请求创建对应的协程,根据 IO 的状态来合理的调度协程。 在 Swoole 4.x 中,协程(Coroutine)取代了异步回调,成为 Swoole 官方推荐的编程方式。Swoole 协程解决了异步回调编程困难的问...

Go 语言函数式编程系列(十一) —— 数据类型篇:字典类型的声明、初始化和基本使用

字典定义 有 PHP 基础的同学都应该知道,PHP 数组包含索引数组和关联数组,PHP 中的索引数组即对应 Go 语言的数组和切片类型,PHP 中的关联数组即对应 Go 语言中的字典类型(map),所谓字典,其实就是存储键值对映射关系的集合,只不过对于强类型的 Go 语言来说,与 PHP 关联数组的不同之处在于需要在声明时指定键和值的类型,此外 Go 字典是个无序集合,底层不会像 PHP...

Go 语言函数式编程系列(十) —— 数据类型篇:在数组切片中动态增删元素

动态增加元素 切片比数组更强大之处在于支持动态增加元素,甚至可以在容量不足的情况下自动扩容,关于容量我们在上篇教程中已经简单提及过,在切片类型中,元素个数和实际可分配的存储空间是两个不同的值,元素的个数即切片的实际长度,而可分配的存储空间就是切片的容量。 一个切片的容量初始值根据创建方式的不同而不同: 对于基于数组和切片创建的切片而言,默认容量是从切片起始索引到对应底层数组的结尾索引;...

Leetcode基础刷题PHP解析(103. Binary Tree Zigzag Level Order Traversal)

这道题的第一版是二叉数的层次遍历(Leetcode基础刷题之PHP解析(102. Binary Tree Level Order Traversal)),这一版让我们按照z字形遍历二叉树。什么意思呢,就是说如果当前层是从左往右遍历,那么下一层就从右往左遍历...

基于 Swoole 构建高性能 Laravel 应用系列 —— 通过 Swoole\Table 实现 Swoole 多进程数据共享

第三方存储媒介 前面我们介绍了基于 Swoole 的 Process 及 Process\Pool 模块在 PHP 中实现多进程管理,但是多进程模式下进程间是相互隔离的,无法共享数据和变量,即便是通过 global 定义的全局或超全局变量,也只是在所属进程中有效,如果要在 Swoole 实现的多进程间共享数据,需要借助第三方存储媒介实现: 数据库:MySQL、MongoDB 缓存:Re...

Leetcode PHP题解--D89 653. Two Sum IV - Input is a BST

D89 653. Two Sum IV - Input is a BST 题目链接 653. Two Sum IV - Input is a BST 题目分析 给定一个二叉树以及一个目标数字,判断能不能通过二叉树中任意两个节点的值相加得到。 思路 思路1 遍历的时候,先把节点存起来,并且与每一个值相加,判断是否等于所需值。 这个算法很明显效率比较低。 思路2 遍历的时候,把自身作为键存进...