成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

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

yuxue / 3306人閱讀

摘要:以上是數(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

相關(guān)文章

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

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

    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ù)類型一般都默認函 緣起 之前下載視頻用的you-get,但是b站一直下不了,優(yōu)酷也經(jīng)常出問題,所以接觸到lulu https://github.com/iawia002/Lulu 這個也是基于you-get ...

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

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

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

    摘要:小白前端一枚,最近在研究,記錄自己學(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中的方...

    lyning 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<