zoukankan      html  css  js  c++  java
  • 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)
    
    }
  • 相关阅读:
    使用urllib
    spring常用的45个注解
    音痴
    android与JS函数传参遗留问题
    方舟编译器源码过一遍流程
    什么是语义学,解释器
    synchronized,ReentrantLock解决锁冲突,脏读的问题
    【Unity3d】ScrollRect自动定位到某点
    计算点到直线的距离】 C#实现
    理财-房月供占工资多少比较合适?
  • 原文地址:https://www.cnblogs.com/ctztake/p/10296609.html
Copyright © 2011-2022 走看看