摘要:以上是数组在语言中的定义方法,代表数组长度为,是数组中元素的类型,花括号中的是数组元素,切记元素个数与类型一定要与前面声明的相符,否则会报错。数组元素的删除在中删除数组元素非常简单,直接即可,以下代码是删除第二个元素。
数组的定义
用过PHP的同学应该很清楚,无论多么复杂的数据格式都可以用数组来表达,什么类型的数据都可以往里塞,它是工作必备的一部分,使用很简单,易用程度简直{{BANNED}}。
$array = [1, "name", ["sex" => "男"]];
在Go语言中就有所不同了,数组是一段固定长度的连续内存区域,与C语言概念完全一致,在声明数组时,要先确定数组的长度,而且数组中的元素只能使用一种类型,心痛,我们再也不能随心所欲的存储数据了。
array := [3]int{1, 2, 3}
以上是数组在Go语言中的定义方法,[3]代表数组长度为3,int是数组中元素的类型,花括号中的是数组元素,切记元素个数与类型一定要与前面声明的相符,否则会报错。除了这种方式,PHP中还有一种动态赋值的方法,代码如下。
$array = []; $array[0] = "name"; $array[1] = 1; print_r($array); //output Array ( [0] => name [1] => 1 )
Go语言也能做到,不过别想那么多,要存储不同数据类型的元素就别想了(其实也不是没有办法,后续文章讲解)。可以通过var声明一个数组,数组的长度和类型提前定义好,接下来就可以根据数组下标来赋值了,可以不必为每个下标赋值,但是切记下标不能越界,否则会报错。
var array [3]string array[0] = "name" array[1] = "sex" fmt.Print(array) //output [name sex ]
每次声明数组时都要数一下元素个数写在中括号里也太鸡肋了,这点Go不可能想不到,果然,可以用...方法来省略掉中括号的数值,这样编译器会自动确定数组中的元素。
array := [...]string{"a", "b", "c", "d"} fmt.Print(array) //output [a b c d]数组的遍历
数组已经定义了,来看一下怎么遍历,在PHP中通过foreach进行遍历。
$array = ["a", "b", "c", "d"]; foreach($array as $k => $v) { echo $v; } //output abcd
Go的写法很类似,通过range进行遍历,只是语法看起来有点怪怪的。
array := [...]string{"a", "b", "c", "d"} for k, v := range array { fmt.Print(k, v) } //output 0a1b2c3d
在Go中没有使用的变量在编译时会报错,那遍历时的k不见得会用到,那怎么解决变量k未被使用的问题呢?其实可以使用Go内置的符号_来替换掉变量k,它的意思是把当前赋的值丢弃掉。
array := [...]string{"a", "b", "c", "d"} for _, v := range array { fmt.Print(v) } //output abcd数组的截取
PHP中对数组截取通过array_slice函数,以下代码是从数组的第二个元素开始,截取两个元素。
$array = [1, 2, 3, 4, 5]; print_r(array_slice($array, 1, 2)); //output Array ( [0] => 2 [1] => 3 )
在Go中更简单一些,可以直接取出第二到第四个元素之间的数据,值得注意的是,取出来的已经不是数组了,叫做切片,记住了,从数组切出来的部分就叫切片,数组与切片最简单的区别就是:数组需要明确指定大小,切片不需要,数组是值传递,切片是地址传递。不过目前还是把它当数组好了。
array := [...]int{1, 2, 3, 4, 5} fmt.Print(array[1:3])数组的追加
在PHP中为数组添加一个新元素使用array_push函数。
$array = [1, 2, 3, 4, 5]; array_push($array, 6); print_r($array); //output Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => 5 [5] => 6 )
在Go中使用append函数,注意这里实际上是对切片的添加而不是数组。
array := []int{1, 2, 3, 4, 5} array = append(array, 6) fmt.Print(array) //output [1 2 3 4 5 6]数组元素的删除
在PHP中删除数组元素非常简单,直接unset即可,以下代码是删除第二个元素。
$array = [1, 2, 3, 4, 5]; unset($array[1]); print_r($array); //output Array ( [0] => 1 [2] => 3 [3] => 4 [4] => 5 )
Go中比较特别,它并没有提供原生的删除方法,只能利用切片的特性,我们定义删除的元素索引为1,然后将1前面的元素与1后面的元素拼接起来,就过滤掉了第1个元素,感觉这种实现方式有点投机,不知道为什么不提供函数来操作。
index := 1 array := []int{1, 2, 3, 4, 5} array = append(array[:index], array[index+1:]...) fmt.Print(array) //output [1 3 4 5]
以上就是PHP与Go在数组上的区别,感兴趣的同学可以自行了解或关注我后续的文章。
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/31699.html
摘要:前言作为一名程序员我感到荣幸。但在时代不断的变迁中,要具备足够的知识才可生存。那就从语言学起把。希望看到本篇文章的你可以对有一个基本的认识。本系列文章与我自己学习语言的方式去描述。以代码与代码的对比加以区分理解。 showImg(https://segmentfault.com/img/bVbiKHc?w=1500&h=1000); 前言 作为一名PHP程序员,我感到荣幸。但在时代不断...
摘要:与纯占位符相对应,非纯占位符的切片是非空列表,对它进行操作赋值与删除,将会影响原始列表。不同位置的替换非等长替换删除元素切片占位符可以带步长,从而实现连续跨越性的替换或删除效果。 2018-12-31 更新声明:切片系列文章本是分三篇写成,现已合并成一篇。合并后,修正了一些严重的错误(如自定义序列切片的部分),还对行文结构与章节衔接做了大量改动。原系列的单篇就不删除了,毕竟也是有单独成...
摘要:小白前端一枚,最近在研究,记录自己学习过程中的一些笔记,以及自己的理解。此外,结构体也支持嵌套。在函数声明时,在函数名前放上一个变量,这个变量称为方法的接收器,一般是结构体类型的。 小白前端一枚,最近在研究golang,记录自己学习过程中的一些笔记,以及自己的理解。 go中包的依赖管理 go中的切片 byte 和 string go中的Map go中的struct结构体 go中的方...
阅读 2623·2021-11-18 10:07
阅读 1083·2021-08-03 14:04
阅读 725·2019-08-30 13:08
阅读 2578·2019-08-29 15:33
阅读 1086·2019-08-29 14:07
阅读 2981·2019-08-29 14:04
阅读 1435·2019-08-29 11:19
阅读 1143·2019-08-29 10:59