Go編程語言中的數(shù)組與其他編程語言非常相似。在程序中,有時(shí)我們需要存儲一組相同類型的數(shù)據(jù),例如學(xué)生分?jǐn)?shù)列表。這種類型的集合使用數(shù)組存儲在程序中。數(shù)組是固定長度的序列,用于將同類元素存儲在內(nèi)存中。由于它們的固定長度數(shù)組不像Go語言中的Slice(切片)這樣受歡迎。
在數(shù)組中,允許在其中存儲零個(gè)或零個(gè)以上的元素。通過使用[]索引運(yùn)算符及其從零開始的位置對數(shù)組的元素進(jìn)行索引,這意味著第一個(gè)元素的索引為array [0],最后一個(gè)元素的索引為array [len(array)-1]。
在Go語言中,數(shù)組是通過兩種不同的方式創(chuàng)建的:
使用var關(guān)鍵字:在Go語言中,使用具有名稱,大小和元素的特定類型的var關(guān)鍵字創(chuàng)建數(shù)組。
語法:
Var array_name[length]Type 或 var array_name[length]Typle{item1, item2, item3, ...itemN}
重要事項(xiàng):
在Go語言中,數(shù)組是可變的,因此您可以在分配的左側(cè)使用array [index]語法在給定索引處設(shè)置數(shù)組的元素。
Var array_name[index] = element[object Object]
您可以使用索引值或使用for循環(huán)來訪問數(shù)組的元素。
在Go語言中,數(shù)組類型是一維的。
數(shù)組的長度是固定的,不能更改。
您可以將重復(fù)的元素存儲在數(shù)組中。
//使用var關(guān)鍵字創(chuàng)建一個(gè)數(shù)組 //使用其索引值訪問數(shù)組 package main import "fmt" func main() { //使用var關(guān)鍵字,創(chuàng)建一個(gè)字符串類型的數(shù)組 var myarr [3]string //使用索引分配元素 myarr[0] = "GFG" myarr[1] = "www.soo66.com" myarr[2] = "nhooo" //訪問數(shù)組的元素 //使用索引值 fmt.Println("數(shù)組的元素:") fmt.Println("元素 1: ", myarr[0]) fmt.Println("元素 2: ", myarr[1]) fmt.Println("元素 3: ", myarr[2]) }
輸出:
數(shù)組的元素: 元素 1: GFG 元素 2: www.soo66.com 元素 3: nhooo
使用簡寫聲明:在Go語言中,數(shù)組也可以使用簡寫聲明進(jìn)行聲明。它比上面的聲明更靈活。
語法:
array_name:= [length]Type{item1, item2, item3,...itemN}[object Object]
//使用簡寫聲明的數(shù)組 //使用for循環(huán)訪問數(shù)組 package main import "fmt" func main() { //數(shù)組的簡寫聲明 arr := [4]string{"nhooo", "gfg", "nhooos1231", "www.soo66.com"} //訪問的元素,使用for循環(huán)的數(shù)組 fmt.Println("數(shù)組的元素:") for i := 0; i < 3; i++ { fmt.Println(arr[i]) } }
輸出:
數(shù)組的元素: nhooo gfg nhooos1231
我們已經(jīng)知道數(shù)組是一維的,但是允許創(chuàng)建多維數(shù)組。多維數(shù)組是相同類型數(shù)組的數(shù)組。在Go語言中,您可以使用以下語法創(chuàng)建多維數(shù)組:
Array_name[Length1][Length2]..[LengthN]Type
您可以使用Var關(guān)鍵字或使用簡寫聲明來創(chuàng)建多維數(shù)組,如下例所示。
注意:在多維數(shù)組中,如果用戶未使用某個(gè)值初始化單元格,則編譯器將自動(dòng)將其初始化為零。Golang中沒有未初始化的概念。
package main import "fmt" func main() { //創(chuàng)建和初始化 //二維數(shù)組 //使用簡寫聲明 //這里需要用(,)逗號 arr := [3][3]string{{"C#", "C", "Python"}, {"Java", "Scala", "Perl"}, {"C++", "Go", "HTML"}} //訪問的值 //數(shù)組使用for循環(huán) fmt.Println("數(shù)組的元素 1") for x := 0; x < 3; x++ { for y := 0; y < 3; y++ { fmt.Println(arr[x][y]) } } //創(chuàng)建二維數(shù)組 //使用var關(guān)鍵字的數(shù)組 //并初始化一個(gè) //使用索引的維數(shù)組 var arr1 [2][2]int arr1[0][0] = 100 arr1[0][1] = 200 arr1[1][0] = 300 arr1[1][1] = 400 //訪問數(shù)組的值 fmt.Println("數(shù)組的元素 2") for p := 0; p < 2; p++ { for q := 0; q < 2; q++ { fmt.Println(arr1[p][q]) } } }
輸出:
數(shù)組的元素 1 C# C Python Java Scala Perl C++ Go HTML 數(shù)組的元素 2 100 200 300 400
在數(shù)組中,如果未顯式初始化數(shù)組,則此數(shù)組的默認(rèn)值為0。
package main import "fmt" func main() { //創(chuàng)建一個(gè)int類型的數(shù)組,存儲兩個(gè)元素 //在這里,我們不初始化數(shù)組,所以數(shù)組的值為零 var myarr[2]int fmt.Println("數(shù)組元素 :", myarr) }
輸出:
數(shù)組元素 : [0 0]
在數(shù)組中,您可以使用len()方法獲取數(shù)組的長度,如下所示:
package main import "fmt" func main() { //創(chuàng)建數(shù)組 //使用簡寫聲明 arr1 := [3]int{9, 7, 6} arr2 := [...]int{9, 7, 6, 4, 5, 3, 2, 4} arr3 := [3]int{9, 3, 5} // 使用len方法計(jì)算數(shù)組大小 fmt.Println("數(shù)組1的長度是:", len(arr1)) fmt.Println("數(shù)組2的長度是:", len(arr2)) fmt.Println("數(shù)組3的長度是:", len(arr3)) }
輸出:
數(shù)組1的長度是: 3 數(shù)組2的長度是: 8 數(shù)組3的長度是: 3
在數(shù)組中,如果省略號“ ...”在長度位置處可見,則數(shù)組的長度由初始化的元素確定。如下例所示:
//數(shù)組中省略號的使用方法 package main import "fmt" func main() { //創(chuàng)建大小已確定的數(shù)組 //根據(jù)其中元素的數(shù)量 //使用省略號 myarray := [...]string{"GFG", "gfg", "nhooos", "www.soo66.com", "nhooo"} fmt.Println("數(shù)組元素: ", myarray) //數(shù)組的長度 //由...決定 //使用len()方法 fmt.Println("數(shù)組的長度為:", len(myarray)) }
輸出:
數(shù)組元素: [GFG gfg nhooos www.soo66.com nhooo] 數(shù)組的長度為: 5
在數(shù)組中,允許您在array 的元素范圍內(nèi)進(jìn)行迭代。如下例所示:
//如何迭代數(shù)組 package main import "fmt" func main() { //創(chuàng)建一個(gè)數(shù)組,其大小 //用省略號表示 myarray := [...]int{29, 79, 49, 39, 20, 49, 48, 49} //使用for循環(huán)迭代數(shù)組 for x := 0; x < len(myarray); x++ { fmt.Printf("%d\n", myarray[x]) } }
輸出:
29 79 49 39 20 49 48 49
在Go語言中,數(shù)組的值類型不是引用類型。因此,當(dāng)將數(shù)組分配給新變量時(shí),在新變量中所做的更改不會影響原始數(shù)組。如下例所示:
package main import "fmt" func main() { //創(chuàng)建一個(gè)數(shù)組,其大小 //用省略號表示 my_array := [...]int{100, 200, 300, 400, 500} fmt.Println("原始數(shù)組(改變前):", my_array) //創(chuàng)建一個(gè)新變量 //并使用my_array進(jìn)行初始化 new_array := my_array fmt.Println("新數(shù)組(改變前):", new_array) //將索引0處的值更改為500 new_array[0] = 500 fmt.Println("新數(shù)組(改變后):", new_array) fmt.Println("原始數(shù)組(改變后):", my_array) }
輸出:
原始數(shù)組(改變前): [100 200 300 400 500] 新數(shù)組(改變前): [100 200 300 400 500] 新數(shù)組(改變后): [500 200 300 400 500] 原始數(shù)組(改變后): [100 200 300 400 500]
在數(shù)組中,如果數(shù)組的元素類型是可比較的,則數(shù)組類型也是可比較的。因此,我們可以使用==運(yùn)算符直接比較兩個(gè)數(shù)組。如下例所示:
//如何比較兩個(gè)數(shù)組 package main import "fmt" func main() { arr1 := [3]int{9, 7, 6} arr2 := [...]int{9, 7, 6} arr3 := [3]int{9, 5, 3} //使用==運(yùn)算符比較數(shù)組 fmt.Println(arr1 == arr2) fmt.Println(arr2 == arr3) fmt.Println(arr1 == arr3) //這將給出和錯(cuò)誤,因?yàn)? // arr1和arr4的類型不匹配 /* arr4:= [4]int{9,7,6} fmt.Println(arr1==arr4) */ }
輸出:
true false false