go 數組

數組的定義和 初始化

數組是同一類型的元素集合數組

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()

}

數組的長度是類型的一部分

var a [3]int

a[0] = 10

a[1] = 20

a[2] = 30

var b [5]int

b = a  // 報錯 a、b是不一樣類型的數組,不能賦值

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)
}
找出數組中和爲給定值的兩個元素的下標,例如數組:[1,3,5,8,7],找出兩個元素之和等於8的下標分別是(0, 4)和(1,2)
 
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)

}
相關文章
相關標籤/搜索