go 数组

数组的定义和 初始化

数组是同一类型的元素集合

var a [3]int
//定义⼀个数组

Go中数组下标从0开始,因此长度为n的数组下标范围:[0,n-1]

整数数组中的元素默认初始化为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
", c)
    fmt.Printf("d=%v
", d)
}

/*
c=[1 2 3 4]
d=[1 2 3 4]
*/

func main() {
    test1()  
}

数组的遍历

方式一

var a [3]int
a[0] = 10
a[1] = 20
a[2] = 30
for i := 0; i < len(a); i++ {

}

方式二

var a [3]int
a[0] = 10
a[1] = 20
a[2] = 30
for index, val := range a {
}

举例

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
", i, a[i])
    }
}


func test2(){
    a := [5]int{1, 2, 3, 4, 5}
    for index, val := range a {
        fmt.Printf("a[%d]=%d
", 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
", i, j, a[i][j])
        }
        fmt.Printf("
")
    }
}

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
", index, i ,v)
        }
        fmt.Printf("
")
    }
}

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("
")
     }
}
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("
")
    printarray(b)
}            

数组拷贝和传参

数组是值类型

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]

 数组是值类型,函数传参也会拷贝

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)
", i, j)
            }
        }
    }
}

func main() {
    var a [5]int = [5]int{1, 2, 3, 7, 5}
    sumTwo(a, 8)

}
原文地址:https://www.cnblogs.com/ctztake/p/10296609.html