美文网首页
Golang——数组array

Golang——数组array

作者: Cici冬雪 | 来源:发表于2020-05-21 21:41 被阅读0次

    数组是同一种数据类型元素的集合。
    数组声明时需要确定数组大小,一旦定义,不可修改
    数组的长度必须是常量,并且长度是数据类型的一部分[5]int[3]int是不同的类型。
    数组索引从0开始。
    数组是值类型。

    var 变量名 [数量]T
    

    声明和初始化

    func main() {
        //数组声明
        var a [5]int
        var b [3]int
        //数组赋值
        a = [5]int{1,2,3,4,5}    
        b = [3]int{1}  
        fmt.Println(a)   //[1 2 3 4 5]
        fmt.Println(b)   //[1 0 0]
        fmt.Printf("a:%T b:%T\n", a, b)  //a:[5]int b:[3]int
    
        //数组声明又赋值
        var c = [3]string{"a","b","c"}
        fmt.Println(c) //[a b c]
    
        //不填写长度,系统推导
        var d = [...]int{1,3,4,5,6,7,8,9}
        fmt.Println(d)    //[1 3 4 5 6 7 8 9]
    
        //根据索引值初始化
        var e [20]int
        e = [20]int{19:1}
        fmt.Println(e)     //[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1]
    } 
    

    数组使用

    func main() {
        var c = [3]string{"a","b","c"}
    
        //直接通过索引取数组中某个值
        fmt.Println("c[1]=" + c[1])
    
        // for遍历
        for i := 0; i < len(c); i++ {
            fmt.Printf("c[%d]=%s\n", i, c[i])
        }
    
        // for range遍历
        for i := range c {
            fmt.Printf("c[%d]=%s\n", i, c[i])
        }
        for i,v := range c {
            fmt.Printf("c[%d]=%s\n", i, v)
        }
    } 
    

    注意,数组是值类型

    func main() {
        a := [3]int{1, 2, 3}
        b := a //把a拷贝一份给了b
        b[0] = 11
        fmt.Println(a)   //[1 2 3]
        fmt.Println(b)   //[11 2 3]
    
        a[1] = 22
        fmt.Println(a)   //[1 22 3]
        fmt.Println(b)   //[11 2 3]
    } 
    

    多维数组声明和初始化

    func main() {
        var a [3][2]int
        fmt.Println(a)   // [[0 0] [0 0] [0 0]]
    
        a = [3][2]int{
            [2]int{1, 2},
            [2]int{3, 4}}
        a = [3][2]int{
            {1, 2},
            {3, 4}}
        fmt.Println(a)   // [[1 2] [3 4] [0 0]]
    
        b := [3][2]int{
            {1, 2},
            {3, 4},
        }
        fmt.Println(b)   // [[1 2] [3 4] [0 0]]
    
        //第一层可以用...,其它层不可以用
        c := [...][2]int{
            {1, 2},
            {3, 4},
        }
        fmt.Println(c)   //[[1 2] [3 4]]
    } 
    

    多维数组使用

    func main() {
        b := [3][2]int{
            {1, 2},
            {3, 4},
        }
        fmt.Println(b[1][1])   // 4
    
        for i := 0; i < len(b); i++ {
            for j := 0; j < len(b[i]); j++{
                fmt.Printf("b[%d][%d]=%d\n", i, j, b[i][j])
            }
        }
    
        for i, v1 := range b {
            for j, v := range v1 {
                fmt.Printf("b[%d][%d]=%d\n", i, j, v)
            } 
        }
    } 
    

    练习题

    1.求数组所有元素的和

    func main() {
        // 求数组所有元素的和
        var a = [5]int{1, 3, 5, 7, 8}
        sum := 0
        for _,v := range a {
            sum += v
        }
        fmt.Printf("sum=%d\n", sum)
    } 
    

    2.找出数组中和为指定值的两个元素的下标,比如从数组[1,3,5,7,8]找出和为8的两个元素的下标分别为(0,3)和(1,2)

    func main() {
        // 找出数组中和为指定值的两个元素的下标,比如从数组[1,3,5,7,8]找出和为8的两个元素的下标分别为(0,3)和(1,2)
        s := 8
        for i,v := range a {
            for j := i + 1; j < len(a); j++ {
                if v + a[j] == s {
                    fmt.Printf("(%d,%d)\n", i, j)
                }
            }
        }
    
        for i,v := range a {
            other := s - v
            for j := i + 1; j < len(a); j++ {
                if i == j {
                    continue
                }
                if other == a[j] {
                    fmt.Printf("(%d,%d)\n", i, j)
                }
            }
        }
    } 
    

    相关文章

      网友评论

          本文标题:Golang——数组array

          本文链接:https://www.haomeiwen.com/subject/ibfcohtx.html