數組是同一類型的元素集合數組
var a [3]int //定義⼀個數組
Go中數組下標從0開始,所以長度爲n的數組下標範圍:[0,n-1]app
整數數組中的元素默認初始化爲0,字符串數組中的元素默認初始化爲" "函數
var a [3]int a[0] = 10 a[1] = 20 a[2] = 30 //數組初始化
var a [3]int = [3]int{10, 20, 30} //定義時數組初始化
a := [3]int{10, 20, 30} //定義時數組初始化
a := […]int{10, 20, 30} //定義時數組初始化
a := [3]int{10} //定義時數組初始化
a := [3]int{2:10} //定義時數組初始化
package main import "fmt" // 數組初始化 func test1() { var a [5]int a[0] = 1 a[1] = 2 a[2] = 3 fmt.Println(a) // [1 2 3 0 0] } func test2() { var a [5]int = [5]int{1, 2, 3, 4, 5} fmt.Println(a) // [1 2 3 4 5] } func test3() { a := [5]int{1, 2, 3, 4, 5} fmt.Println(a) // [1 2 3 4 5] } func test4() { a := [...]int{1, 2, 3, 4, 5} fmt.Println(a) // [1 2 3 4 5] } func test5() { a := [3]int{5} fmt.Println(a) //[5 0 0] } func test6(){ a := [5]int{3:30, 2:20} fmt.Println(a) //[0 0 20 30 0] } func main() { // test1() // test2() // test3() // test4() // test5() test6() }
package main import "fmt" func test1() { // var a [3]int; // b := [4]int{1,2,3,4} // a = b 報錯 不是 同類型的數組 不能直接 賦值 var c [4]int d := [4]int{1, 2, 3, 4} c = d fmt.Printf("c=%v\n", c) fmt.Printf("d=%v\n", d) } /* c=[1 2 3 4] d=[1 2 3 4] */ func main() { test1() }
方式一google
var a [3]int a[0] = 10 a[1] = 20 a[2] = 30 for i := 0; i < len(a); i++ { }
方式二spa
var a [3]int a[0] = 10 a[1] = 20 a[2] = 30 for index, val := range a { }
舉例code
package main import "fmt" func test1() { a := [5]int{1, 2, 3, 4, 5} for i := 0; i < len(a); i++ { fmt.Printf("a[%d]=%d\n", i, a[i]) } } func test2(){ a := [5]int{1, 2, 3, 4, 5} for index, val := range a { fmt.Printf("a[%d]=%d\n", index, val) } } /* a[0]=1 a[1]=2 a[2]=3 a[3]=4 a[4]=5 */ func main() { // test1() test2() }
package main import "fmt" func test1() { var a [3][2]int a[0][0] = 1 a[0][1] = 2 a[1][0] = 3 a[1][1] = 4 a[2][0] = 5 a[2][1] = 6 fmt.Println(a) // [[1 2] [3 4] [5 6]] } func test2() { var a [3][2]int = [3][2]int{{1, 2}, {3, 4}, {5, 6}} for i := 0; i < len(a); i++ { for j := 0; j < len(a[i]); j++ { fmt.Printf("a[%d][%d] = %d\n", i, j, a[i][j]) } fmt.Printf("\n") } } func test3(){ var a [3][2]int = [3][2]int{{1, 2}, {3, 4}, {5, 6}} for index, val := range(a){ for i,v:= range(val){ fmt.Printf("a[%d][%d] = %d\n", index, i ,v) } fmt.Printf("\n") } } func main() { // test1() // test2() test3() }
package main import ( "fmt" ) func printarray(a [3][2]string) { for _, v1 := range a { for _, v2 := range v1 { fmt.Printf("%s ", v2) } fmt.Printf("\n") } } func main() { a := [3][2]string{ {"lion", "tiger"}, {"cat", "dog"}, {"pigeon", "peacock"}, } printarray(a) var b [3][2]string b[0][0] = "apple" b[0][1] = "samsung" b[1][0] = "microsoft" b[1][1] = "google" b[2][0] = "AT&T" b[2][1] = "T-Mobile" fmt.Printf("\n") printarray(b) }
數組是值類型blog
var a [3]int a[0] = 10 a[1] = 20 a[2] = 30 b := a //b了數組a中全部元素 b[0] = 1000 fmt.Println(a, b)
a [10,20,30]字符串
b [1000,20,30]get
數組是值類型,函數傳參也會拷貝string
func main() { var a [3]int a[0] = 10 a[1] = 20 a[2] = 30 modify(a) fmt.Println(a) } func modify(b [3]int) { b[0] = 1000 return }
a [10,20,30]
b [1000,20,30]
求數組全部元素之和
package main import ( "fmt" "math/rand" "time" ) func test1(a [5]int) int { var sum int // for i := 0; i < len(a); i++ { // sum += a[i] // } for _, v := range a { sum += v } return sum } func run() int { rand.Seed(time.Now().Unix()) // 不設置 這個的話 rand.Intn() 取到的數據 都是 同樣的 var a [5]int for i := 0; i < len(a); i++ { a[i] = rand.Intn(100) // rand.Intn(n) 隨機取出 0 - n-1 的整數 // a[i] = rand.Int() // rand.Intn() 隨機取出 0- int最大範圍之間的 的整數 } sum := test1(a) return sum } func main() { sum := run() fmt.Println(sum) }
package main import "fmt" // 找出數組中和爲給定值的兩個元素的下標,例如數組:[1,3,5,8,7],找出兩個元素之和等於8的下標分別是(0, 4)和(1,2) func sumTwo(a [5]int, target int) { for i := 0; i < len(a); i++ { b := target - a[i] for j := i + 1; j < len(a); j++ { if b == a[j] { fmt.Printf("(%d, %d)\n", i, j) } } } } func main() { var a [5]int = [5]int{1, 2, 3, 7, 5} sumTwo(a, 8) }