一、數(shù)組(Array)
1.1 什么是數(shù)組
Go 語言提供了數(shù)組類型的數(shù)據(jù)結(jié)構(gòu)。
數(shù)組是具有相同唯一類型的一組已編號且長度固定的數(shù)據(jù)項序列,這種類型可以是任意的原始類型例如整形、字符串或者自定義類型。
數(shù)組元素可以通過索引(位置)來讀?。ɑ蛘咝薷模饕龔?開始,第一個元素索引為 0,第二個索引為 1,以此類推。數(shù)組的下標(biāo)取值范圍是從0開始,到長度減1。
數(shù)組一旦定義后,大小不能更改。
1.2 數(shù)組的語法
聲明和初始化數(shù)組
需要指明數(shù)組的大小和存儲的數(shù)據(jù)類型。
var variable_name [SIZE] variable_type
示例代碼:
var balance [10] float32
var balance = [5]float32{1000.0, 2.0, 3.4, 7.0, 50.0}
初始化數(shù)組中 {} 中的元素個數(shù)不能大于 [] 中的數(shù)字。
如果忽略 [] 中的數(shù)字不設(shè)置數(shù)組大小,Go 語言會根據(jù)元素的個數(shù)來設(shè)置數(shù)組的大小:
var balance = []float32{1000.0, 2.0, 3.4, 7.0, 50.0}
balance[4] = 50.0
數(shù)組的其他創(chuàng)建方式:
var a [4] float32 // 等價于:var arr2 = [4]float32{}
fmt.Println(a) // [0 0 0 0]
var b = [5] string{"ruby", "王二狗", "rose"}
fmt.Println(b) // [ruby 王二狗 rose ]
var c = [5] int{'A', 'B', 'C', 'D', 'E'} // byte
fmt.Println(c) // [65 66 67 68 69]
// ... makes the compiler determine the length(使用[...]:編譯器確定長度)
d := [...] int{1,2,3,4,5}// 根據(jù)元素的個數(shù),設(shè)置數(shù)組的大小
fmt.Println(d)//[1 2 3 4 5]
e := [5] int{4: 100} // [0 0 0 0 100],設(shè)置數(shù)組某個位置的值
fmt.Println(e)
f := [...] int{0: 1, 4: 1, 9: 1} // [1 0 0 0 1 0 0 0 0 1]
fmt.Println(f)
g := [...] string {4 : "aaa"} //[ aaa]
fmt.Println(g)
if g[0] == "" {
fmt.Println("aaaaaa")
}
//輸出:aaaaaa
訪問數(shù)組元素
float32 salary = balance[9]
示例代碼:
package main
import "fmt"
func main() {
var n [10]int /* n 是一個長度為 10 的數(shù)組 */
var i,j int
/* 為數(shù)組 n 初始化元素 */
for i = 0; i < 10; i++ {
n[i] = i + 100 /* 設(shè)置元素為 i + 100 */
}
/* 輸出每個數(shù)組元素的值 */
for j = 0; j < 10; j++ {
fmt.Printf("Element[%d] = %d\n", j, n[j] )
}
}
運行結(jié)果:
Element[0] = 100
Element[1] = 101
Element[2] = 102
Element[3] = 103
Element[4] = 104
Element[5] = 105
Element[6] = 106
Element[7] = 107
Element[8] = 108
Element[9] = 109
數(shù)組的長度
通過將數(shù)組作為參數(shù)傳遞給len函數(shù),可以獲得數(shù)組的長度。
示例代碼:
package main
import "fmt"
func main() {
a := [...]float64{67.7, 89.8, 21, 78}
fmt.Println("length of a is",len(a))
for i := 0; i < len(a); i++ { //looping from 0 to the length of the array
fmt.Printf("%d th element of a is %.2f\n", i, a[i])
}
}
運行結(jié)果:
length of a is 4
遍歷數(shù)組():
package main
import "fmt"
func main() {
a := [...]float64{67.7, 89.8, 21, 78}
sum := float64(0)
for i := 0; i < len(a); i++ { //looping from 0 to the length of the array
fmt.Printf("%d th element of a is %.2f\n", i, a[i])
}
//使用range遍歷
for i, v := range a {//range returns both the index and value
fmt.Printf("%d the element of a is %.2f\n", i, v)
sum += v
}
fmt.Println("\nsum of all elements of a",sum)
}
//輸出
0 th element of a is 67.70
1 th element of a is 89.80
2 th element of a is 21.00
3 th element of a is 78.00
0 the element of a is 67.70
1 the element of a is 89.80
2 the element of a is 21.00
3 the element of a is 78.00
sum of all elements of a 256.5
如果您只需要值并希望忽略索引,那么可以通過使用_ blank標(biāo)識符替換索引來實現(xiàn)這一點。
for _, v := range a { //ignores index
}
//輸出
67.7
89.8
21
78
1.3 多維數(shù)組
Go 語言支持多維數(shù)組,以下為常用的多維數(shù)組聲明語法方式:
var variable_name [SIZE1][SIZE2]...[SIZEN] variable_type
var threedim [5][10][4]int
三維數(shù)組
a = [3][4]int{
{0, 1, 2, 3} , /* 第一行索引為 0 */
{4, 5, 6, 7} , /* 第二行索引為 1 */
{8, 9, 10, 11} /* 第三行索引為 2 */
}
int val = a[2][3]
1.4 數(shù)組是值類型
數(shù)組是值類型
Go中的數(shù)組是值類型,而不是引用類型。這意味著當(dāng)它們被分配給一個新變量時,將把原始數(shù)組的副本分配給新變量。如果對新變量進(jìn)行了更改,則不會在原始數(shù)組中反映。
package main
import "fmt"
func main() {
a := [...]string{"USA", "China", "India", "Germany", "France"}
b := a // a copy of a is assigned to b
b[0] = "Singapore"
fmt.Println("a is ", a)
fmt.Println("b is ", b)
}
運行結(jié)果:文章來源:http://www.zghlxwxcb.cn/news/detail-472748.html
a is [USA China India Germany France]
b is [Singapore China India Germany France]
數(shù)組的大小是類型的一部分。因此[5]int和[25]int是不同的類型。因此,數(shù)組不能被調(diào)整大小。不要擔(dān)心這個限制,因為切片的存在是為了解決這個問題。文章來源地址http://www.zghlxwxcb.cn/news/detail-472748.html
package main
func main() {
a := [3]int{5, 78, 8}
var b [5]int
b = a //not possible since [3]int and [5]int are distinct types
}
到了這里,關(guān)于十、go語言Array(數(shù)組)基本使用方法的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!