Golang數(shù)組類型

數(shù)組

數(shù)組是指一系列同一類型數(shù)據(jù)的集合荤胁。數(shù)組中包含的每個(gè)數(shù)據(jù)被稱為數(shù)組元素(element),一個(gè)數(shù)組包含的元素個(gè)數(shù)被稱為數(shù)組的長度艺谆。

1. 聲明方法

[32]byte                   //長度為32的數(shù)組
[2*N] struct {x, y int32}  //復(fù)雜類型數(shù)組
[100]*float64              //指針數(shù)組
[3][5]int                  //二維數(shù)組
[2][2][2]float64           //等同于[2]([2]([2]float64))

數(shù)組的長度在聲明時(shí)就已經(jīng)確定榨惰,后面不能再次修改【蔡溃可以使用len()函數(shù)來求數(shù)組的長度琅催。

2. 元素訪問

使用下標(biāo)訪問數(shù)組,同C語言一樣虫给,下標(biāo)也是從0開始

for i := 0; i < len(array); i++ {
    fmt.Println("Element", i, "of array is", array[i])
}

當(dāng)然藤抡,我們也可以使用Go語言提供的range關(guān)鍵字來遍歷數(shù)組。

for i, v := range array {
    fmt.Println("Element", i, "of array is", v)
}

3.值類型

Go語言中抹估,數(shù)組是值類型缠黍,作為參數(shù)傳遞時(shí),都會(huì)產(chǎn)生一次復(fù)制動(dòng)作棋蚌。所以嫁佳,在函數(shù)中不能
將數(shù)組作為參數(shù)傳遞挨队,因?yàn)樵诤瘮?shù)中操作的只不過是數(shù)組的副本而已。

package main

import "fmt"

func modify(array [5]int) {
    array[0] = 10
    fmt.Println("In Modify, array values:", array)
}

func main() {
    array := [5]int{1, 2, 3, 4, 5}
    modify(array)
    fmt.Println("In Main, array values:", array)
}

它的輸出為:

In Modify, array values: [10 2 3 4 5]
In Main, array values: [1 2 3 4 5]

4.數(shù)組切片

在前面我們提到蒿往,數(shù)組有兩個(gè)特性

  • 數(shù)組長度在定義后無法改變
  • 數(shù)組是值類型盛垦,在參數(shù)傳遞時(shí)會(huì)產(chǎn)生副本。
    這兩大特性使得數(shù)組無法適應(yīng)開發(fā)者的真實(shí)需求瓤漏。所以我們使用數(shù)組切片(Slice)來彌補(bǔ)
    數(shù)組的不足腾夯。
    從底層的角度看,數(shù)組切片仍然使用數(shù)組來管理元素蔬充〉悖基于數(shù)組,數(shù)組切片添加了一系列管理功能饥漫≌ゴ簦可以隨時(shí)動(dòng)態(tài)擴(kuò)充存放空間。并且在傳參時(shí)不會(huì)產(chǎn)生復(fù)制庸队。

4.1 基于數(shù)組創(chuàng)建數(shù)組切片

var marr [5]int = [5]int{1, 2, 3, 4, 5}
var mSlice []int = marr[:3]

Golang支持使用Array[first:last]的方式來基于數(shù)組生成一個(gè)數(shù)組切片积蜻。

4.2 直接創(chuàng)建數(shù)組切片

mySlice1 := make([]int, 5) //創(chuàng)建一個(gè)初始元素為5的數(shù)組切片,元素初始值為0
mySlice2 := make([]int, 5, 10)  //創(chuàng)建一個(gè)初始元素為5的數(shù)組切片彻消,元素初始值為0,并且預(yù)留10個(gè)元素空間竿拆。
mySlice3 := []int{1, 2, 3, 4, 5} //創(chuàng)建,并初始化一個(gè)數(shù)組切片

4.3 遍歷

同數(shù)組一樣宾尚,我們可以使用下標(biāo)或者range的方式遍歷數(shù)組切片

4.4 動(dòng)態(tài)增減元素

Go語言內(nèi)置len()和cap()方法丙笋。len()函數(shù)返回?cái)?shù)組切片當(dāng)前存儲的元素個(gè)數(shù),cap()函數(shù)返回?cái)?shù)組切片分配的空間大小煌贴。例如:

mySlice := make([]int, 5, 10)
len(mySlice) //5
cap(mySlice) //10

4.4.1 新增元素

如果想往上面的mySlice數(shù)組切片添加元素御板,可以使用append()函數(shù)。

mySlice = append(mySlice, 1, 2, 3) //mySlice末尾添加三個(gè)元素
mySlice2 := []int{8, 9, 10}
mySlice = append(mySlice, mySlice2...)  //將mySlice2數(shù)組切片添加到mySlice末尾崔步。

5. 內(nèi)容復(fù)制

Go語言另一個(gè)內(nèi)置函數(shù)copy()稳吮,用于將內(nèi)容從一個(gè)數(shù)組切片復(fù)制到另一個(gè)數(shù)組切片。如果兩個(gè)數(shù)組切片不一樣大井濒。如果加入兩數(shù)組切片不一樣大灶似,就會(huì)按較小的那個(gè)數(shù)組切片的元素個(gè)數(shù)進(jìn)行復(fù)制。

slice1 := []int{1, 2, 3, 4, 5}
slice2 := []int{5, 4, 3}

copy(slice2, slice1) //只會(huì)復(fù)制slice1前三個(gè)元素到slice2中
copy(slice1, slice2) //只會(huì)復(fù)制slice2的3個(gè)元素到slice1的前三個(gè)位置瑞你。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末酪惭,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子者甲,更是在濱河造成了極大的恐慌春感,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,427評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異鲫懒,居然都是意外死亡嫩实,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,551評論 3 395
  • 文/潘曉璐 我一進(jìn)店門窥岩,熙熙樓的掌柜王于貴愁眉苦臉地迎上來甲献,“玉大人,你說我怎么就攤上這事颂翼』稳鳎” “怎么了?”我有些...
    開封第一講書人閱讀 165,747評論 0 356
  • 文/不壞的土叔 我叫張陵朦乏,是天一觀的道長球及。 經(jīng)常有香客問我,道長呻疹,這世上最難降的妖魔是什么吃引? 我笑而不...
    開封第一講書人閱讀 58,939評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮诲宇,結(jié)果婚禮上际歼,老公的妹妹穿的比我還像新娘。我一直安慰自己姑蓝,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,955評論 6 392
  • 文/花漫 我一把揭開白布吕粗。 她就那樣靜靜地躺著纺荧,像睡著了一般。 火紅的嫁衣襯著肌膚如雪颅筋。 梳的紋絲不亂的頭發(fā)上宙暇,一...
    開封第一講書人閱讀 51,737評論 1 305
  • 那天,我揣著相機(jī)與錄音议泵,去河邊找鬼占贫。 笑死,一個(gè)胖子當(dāng)著我的面吹牛先口,可吹牛的內(nèi)容都是我干的型奥。 我是一名探鬼主播,決...
    沈念sama閱讀 40,448評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼碉京,長吁一口氣:“原來是場噩夢啊……” “哼厢汹!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起谐宙,我...
    開封第一講書人閱讀 39,352評論 0 276
  • 序言:老撾萬榮一對情侶失蹤烫葬,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體搭综,經(jīng)...
    沈念sama閱讀 45,834評論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡垢箕,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,992評論 3 338
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了兑巾。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片条获。...
    茶點(diǎn)故事閱讀 40,133評論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖闪朱,靈堂內(nèi)的尸體忽然破棺而出月匣,到底是詐尸還是另有隱情,我是刑警寧澤奋姿,帶...
    沈念sama閱讀 35,815評論 5 346
  • 正文 年R本政府宣布锄开,位于F島的核電站,受9級特大地震影響称诗,放射性物質(zhì)發(fā)生泄漏萍悴。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,477評論 3 331
  • 文/蒙蒙 一寓免、第九天 我趴在偏房一處隱蔽的房頂上張望癣诱。 院中可真熱鬧,春花似錦袜香、人聲如沸撕予。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,022評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽实抡。三九已至,卻和暖如春欢策,著一層夾襖步出監(jiān)牢的瞬間吆寨,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,147評論 1 272
  • 我被黑心中介騙來泰國打工踩寇, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留啄清,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,398評論 3 373
  • 正文 我出身青樓俺孙,卻偏偏與公主長得像辣卒,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子鼠冕,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,077評論 2 355