摘要:以上是數(shù)組在語言中的定義方法,代表數(shù)組長度為,是數(shù)組中元素的類型,花括號中的是數(shù)組元素,切記元素個數(shù)與類型一定要與前面聲明的相符,否則會報錯。數(shù)組元素的刪除在中刪除數(shù)組元素非常簡單,直接即可,以下代碼是刪除第二個元素。
數(shù)組的定義
用過PHP的同學(xué)應(yīng)該很清楚,無論多么復(fù)雜的數(shù)據(jù)格式都可以用數(shù)組來表達,什么類型的數(shù)據(jù)都可以往里塞,它是工作必備的一部分,使用很簡單,易用程度簡直{{BANNED}}。
$array = [1, "name", ["sex" => "男"]];
在Go語言中就有所不同了,數(shù)組是一段固定長度的連續(xù)內(nèi)存區(qū)域,與C語言概念完全一致,在聲明數(shù)組時,要先確定數(shù)組的長度,而且數(shù)組中的元素只能使用一種類型,心痛,我們再也不能隨心所欲的存儲數(shù)據(jù)了。
array := [3]int{1, 2, 3}
以上是數(shù)組在Go語言中的定義方法,[3]代表數(shù)組長度為3,int是數(shù)組中元素的類型,花括號中的是數(shù)組元素,切記元素個數(shù)與類型一定要與前面聲明的相符,否則會報錯。除了這種方式,PHP中還有一種動態(tài)賦值的方法,代碼如下。
$array = []; $array[0] = "name"; $array[1] = 1; print_r($array); //output Array ( [0] => name [1] => 1 )
Go語言也能做到,不過別想那么多,要存儲不同數(shù)據(jù)類型的元素就別想了(其實也不是沒有辦法,后續(xù)文章講解)??梢酝ㄟ^var聲明一個數(shù)組,數(shù)組的長度和類型提前定義好,接下來就可以根據(jù)數(shù)組下標(biāo)來賦值了,可以不必為每個下標(biāo)賦值,但是切記下標(biāo)不能越界,否則會報錯。
var array [3]string array[0] = "name" array[1] = "sex" fmt.Print(array) //output [name sex ]
每次聲明數(shù)組時都要數(shù)一下元素個數(shù)寫在中括號里也太雞肋了,這點Go不可能想不到,果然,可以用...方法來省略掉中括號的數(shù)值,這樣編譯器會自動確定數(shù)組中的元素。
array := [...]string{"a", "b", "c", "d"} fmt.Print(array) //output [a b c d]數(shù)組的遍歷
數(shù)組已經(jīng)定義了,來看一下怎么遍歷,在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內(nèi)置的符號_來替換掉變量k,它的意思是把當(dāng)前賦的值丟棄掉。
array := [...]string{"a", "b", "c", "d"} for _, v := range array { fmt.Print(v) } //output abcd數(shù)組的截取
PHP中對數(shù)組截取通過array_slice函數(shù),以下代碼是從數(shù)組的第二個元素開始,截取兩個元素。
$array = [1, 2, 3, 4, 5]; print_r(array_slice($array, 1, 2)); //output Array ( [0] => 2 [1] => 3 )
在Go中更簡單一些,可以直接取出第二到第四個元素之間的數(shù)據(jù),值得注意的是,取出來的已經(jīng)不是數(shù)組了,叫做切片,記住了,從數(shù)組切出來的部分就叫切片,數(shù)組與切片最簡單的區(qū)別就是:數(shù)組需要明確指定大小,切片不需要,數(shù)組是值傳遞,切片是地址傳遞。不過目前還是把它當(dāng)數(shù)組好了。
array := [...]int{1, 2, 3, 4, 5} fmt.Print(array[1:3])數(shù)組的追加
在PHP中為數(shù)組添加一個新元素使用array_push函數(shù)。
$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函數(shù),注意這里實際上是對切片的添加而不是數(shù)組。
array := []int{1, 2, 3, 4, 5} array = append(array, 6) fmt.Print(array) //output [1 2 3 4 5 6]數(shù)組元素的刪除
在PHP中刪除數(shù)組元素非常簡單,直接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個元素,感覺這種實現(xiàn)方式有點投機,不知道為什么不提供函數(shù)來操作。
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在數(shù)組上的區(qū)別,感興趣的同學(xué)可以自行了解或關(guān)注我后續(xù)的文章。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.hztianpu.com/yun/31699.html
摘要:前言作為一名程序員我感到榮幸。但在時代不斷的變遷中,要具備足夠的知識才可生存。那就從語言學(xué)起把。希望看到本篇文章的你可以對有一個基本的認識。本系列文章與我自己學(xué)習(xí)語言的方式去描述。以代碼與代碼的對比加以區(qū)分理解。 showImg(https://segmentfault.com/img/bVbiKHc?w=1500&h=1000); 前言 作為一名PHP程序員,我感到榮幸。但在時代不斷...
摘要:而且數(shù)組是定長的,而切片可以調(diào)整長度。也就是說類型的值可以用于表示任意語言類型的值。下劃線讓編譯器接受這類導(dǎo)入,并且調(diào)用對應(yīng)包內(nèi)的所有代碼文件里定義的函數(shù)。結(jié)構(gòu)體可以當(dāng)做是一種數(shù)據(jù)類型一般都默認函 緣起 之前下載視頻用的you-get,但是b站一直下不了,優(yōu)酷也經(jīng)常出問題,所以接觸到lulu https://github.com/iawia002/Lulu 這個也是基于you-get ...
摘要:與純占位符相對應(yīng),非純占位符的切片是非空列表,對它進行操作賦值與刪除,將會影響原始列表。不同位置的替換非等長替換刪除元素切片占位符可以帶步長,從而實現(xiàn)連續(xù)跨越性的替換或刪除效果。 2018-12-31 更新聲明:切片系列文章本是分三篇寫成,現(xiàn)已合并成一篇。合并后,修正了一些嚴(yán)重的錯誤(如自定義序列切片的部分),還對行文結(jié)構(gòu)與章節(jié)銜接做了大量改動。原系列的單篇就不刪除了,畢竟也是有單獨成...
摘要:小白前端一枚,最近在研究,記錄自己學(xué)習(xí)過程中的一些筆記,以及自己的理解。此外,結(jié)構(gòu)體也支持嵌套。在函數(shù)聲明時,在函數(shù)名前放上一個變量,這個變量稱為方法的接收器,一般是結(jié)構(gòu)體類型的。 小白前端一枚,最近在研究golang,記錄自己學(xué)習(xí)過程中的一些筆記,以及自己的理解。 go中包的依賴管理 go中的切片 byte 和 string go中的Map go中的struct結(jié)構(gòu)體 go中的方...
閱讀 2710·2021-11-18 10:07
閱讀 1158·2021-08-03 14:04
閱讀 778·2019-08-30 13:08
閱讀 2633·2019-08-29 15:33
閱讀 1170·2019-08-29 14:07
閱讀 3084·2019-08-29 14:04
閱讀 1518·2019-08-29 11:19
閱讀 1203·2019-08-29 10:59