国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

PHP轉(zhuǎn)Go系列:數(shù)組與切片

yuxue / 3234人閱讀

摘要:以上是數(shù)組在語言中的定義方法,代表數(shù)組長度為,是數(shù)組中元素的類型,花括號中的是數(shù)組元素,切記元素個(gè)數(shù)與類型一定要與前面聲明的相符,否則會(huì)報(bào)錯(cuò)。數(shù)組元素的刪除在中刪除數(shù)組元素非常簡單,直接即可,以下代碼是刪除第二個(gè)元素。

數(shù)組的定義

用過PHP的同學(xué)應(yīng)該很清楚,無論多么復(fù)雜的數(shù)據(jù)格式都可以用數(shù)組來表達(dá),什么類型的數(shù)據(jù)都可以往里塞,它是工作必備的一部分,使用很簡單,易用程度簡直{{BANNED}}。

$array = [1, "name", ["sex" => "男"]];

在Go語言中就有所不同了,數(shù)組是一段固定長度的連續(xù)內(nèi)存區(qū)域,與C語言概念完全一致,在聲明數(shù)組時(shí),要先確定數(shù)組的長度,而且數(shù)組中的元素只能使用一種類型,心痛,我們再也不能隨心所欲的存儲數(shù)據(jù)了。

array := [3]int{1, 2, 3}

以上是數(shù)組在Go語言中的定義方法,[3]代表數(shù)組長度為3,int是數(shù)組中元素的類型,花括號中的是數(shù)組元素,切記元素個(gè)數(shù)與類型一定要與前面聲明的相符,否則會(huì)報(bào)錯(cuò)。除了這種方式,PHP中還有一種動(dòng)態(tài)賦值的方法,代碼如下。

$array = [];
$array[0] = "name";
$array[1] = 1;
print_r($array);

//output
Array
(
    [0] => name
    [1] => 1
)

Go語言也能做到,不過別想那么多,要存儲不同數(shù)據(jù)類型的元素就別想了(其實(shí)也不是沒有辦法,后續(xù)文章講解)。可以通過var聲明一個(gè)數(shù)組,數(shù)組的長度和類型提前定義好,接下來就可以根據(jù)數(shù)組下標(biāo)來賦值了,可以不必為每個(gè)下標(biāo)賦值,但是切記下標(biāo)不能越界,否則會(huì)報(bào)錯(cuò)。

var array [3]string
array[0] = "name"
array[1] = "sex"
fmt.Print(array) //output [name sex ]

每次聲明數(shù)組時(shí)都要數(shù)一下元素個(gè)數(shù)寫在中括號里也太雞肋了,這點(diǎn)Go不可能想不到,果然,可以用...方法來省略掉中括號的數(shù)值,這樣編譯器會(huì)自動(dòng)確定數(shù)組中的元素。

array := [...]string{"a", "b", "c", "d"}
fmt.Print(array) //output [a b c d]
數(shù)組的遍歷

數(shù)組已經(jīng)定義了,來看一下怎么遍歷,在PHP中通過foreach進(jìn)行遍歷。

$array = ["a", "b", "c", "d"];
foreach($array as $k => $v) {
    echo $v;
}
//output abcd

Go的寫法很類似,通過range進(jìn)行遍歷,只是語法看起來有點(diǎn)怪怪的。

array := [...]string{"a", "b", "c", "d"}
for k, v := range array {
    fmt.Print(k, v)
}
//output 0a1b2c3d

在Go中沒有使用的變量在編譯時(shí)會(huì)報(bào)錯(cuò),那遍歷時(shí)的k不見得會(huì)用到,那怎么解決變量k未被使用的問題呢?其實(shí)可以使用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ù)組的第二個(gè)元素開始,截取兩個(gè)元素。

$array = [1, 2, 3, 4, 5];
print_r(array_slice($array, 1, 2));

//output
Array
(
    [0] => 2
    [1] => 3
)

在Go中更簡單一些,可以直接取出第二到第四個(gè)元素之間的數(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ù)組添加一個(gè)新元素使用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í)際上是對切片的添加而不是數(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即可,以下代碼是刪除第二個(gè)元素。

$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個(gè)元素,感覺這種實(shí)現(xiàn)方式有點(diǎn)投機(jī),不知道為什么不提供函數(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://specialneedsforspecialkids.com/yun/31699.html

相關(guān)文章

  • PHP To Go 轉(zhuǎn)型手記 (二)

    摘要:前言作為一名程序員我感到榮幸。但在時(shí)代不斷的變遷中,要具備足夠的知識才可生存。那就從語言學(xué)起把。希望看到本篇文章的你可以對有一個(gè)基本的認(rèn)識。本系列文章與我自己學(xué)習(xí)語言的方式去描述。以代碼與代碼的對比加以區(qū)分理解。 showImg(https://segmentfault.com/img/bVbiKHc?w=1500&h=1000); 前言 作為一名PHP程序員,我感到榮幸。但在時(shí)代不斷...

    hot_pot_Leo 評論0 收藏0
  • golang 入門

    摘要:而且數(shù)組是定長的,而切片可以調(diào)整長度。也就是說類型的值可以用于表示任意語言類型的值。下劃線讓編譯器接受這類導(dǎo)入,并且調(diào)用對應(yīng)包內(nèi)的所有代碼文件里定義的函數(shù)。結(jié)構(gòu)體可以當(dāng)做是一種數(shù)據(jù)類型一般都默認(rèn)函 緣起 之前下載視頻用的you-get,但是b站一直下不了,優(yōu)酷也經(jīng)常出問題,所以接觸到lulu https://github.com/iawia002/Lulu 這個(gè)也是基于you-get ...

    loonggg 評論0 收藏0
  • Python進(jìn)階:切片的誤區(qū)高級用法

    摘要:與純占位符相對應(yīng),非純占位符的切片是非空列表,對它進(jìn)行操作賦值與刪除,將會(huì)影響原始列表。不同位置的替換非等長替換刪除元素切片占位符可以帶步長,從而實(shí)現(xiàn)連續(xù)跨越性的替換或刪除效果。 2018-12-31 更新聲明:切片系列文章本是分三篇寫成,現(xiàn)已合并成一篇。合并后,修正了一些嚴(yán)重的錯(cuò)誤(如自定義序列切片的部分),還對行文結(jié)構(gòu)與章節(jié)銜接做了大量改動(dòng)。原系列的單篇就不刪除了,畢竟也是有單獨(dú)成...

    liaorio 評論0 收藏0
  • golang學(xué)習(xí)筆記(一)——golang基礎(chǔ)和相關(guān)數(shù)據(jù)結(jié)構(gòu)

    摘要:小白前端一枚,最近在研究,記錄自己學(xué)習(xí)過程中的一些筆記,以及自己的理解。此外,結(jié)構(gòu)體也支持嵌套。在函數(shù)聲明時(shí),在函數(shù)名前放上一個(gè)變量,這個(gè)變量稱為方法的接收器,一般是結(jié)構(gòu)體類型的。 小白前端一枚,最近在研究golang,記錄自己學(xué)習(xí)過程中的一些筆記,以及自己的理解。 go中包的依賴管理 go中的切片 byte 和 string go中的Map go中的struct結(jié)構(gòu)體 go中的方...

    lyning 評論0 收藏0

發(fā)表評論

0條評論

最新活動(dòng)
閱讀需要支付1元查看
<