美文网首页
golang数组

golang数组

作者: 程序小白菜 | 来源:发表于2019-12-30 13:25 被阅读0次

    数组的定义

    数组是一个由固定长度的特定类型元素组成的序列,一个数组可以由零个或多个元素组成。数组的长度是数组类型的组成部分。因为数组的长度是数组类型的一个部分,不同长度或不同类型的数据组成的数组都是不同的类型。

    数组的定义方式

    var a [3]int                    // 定义长度为3的int型数组, 元素全部为0
    var b = [...]int{1, 2, 3}       // 定义长度为3的int型数组, 元素为 1, 2, 3
    var c = [...]int{2: 3, 1: 2}    // 定义长度为3的int型数组, 元素为 0, 2, 3
    var d = [...]int{1, 2, 4: 5, 6} // 定义长度为6的int型数组, 元素为 1, 2, 0, 0, 5, 6
    

    第一种方式是定义一个数组变量的最基本的方式,数组的长度明确指定,数组中的每个元素都以零值初始化。
    第二种方式定义数组,可以在定义的时候顺序指定全部元素的初始化值,数组的长度根据初始化元素的数目自动计算。
    第三种方式是以索引的方式来初始化数组的元素,因此元素的初始化值出现顺序比较随意。这种初始化方式和map[int]Type类型的初始化语法类似。数组的长度以出现的最大的索引为准,没有明确初始化的元素依然用0值初始化。
    第四种方式是混合了第二种和第三种的初始化方式,前面两个元素采用顺序初始化,第三第四个元素零值初始化,第五个元素通过索引初始化,最后一个元素跟在前面的第五个元素之后采用顺序初始化。

    Go 数组的长度不可改变

    • 声明数组

    var variable_name [SIZE] variable_type

    var arr [10]int
    arr[0] = 42
    arr[1] = 13
    fmt.Printf("The first element is %d\n", arr[0])
    
    • 初始化数组
    //指定元素类型及元素个数
    var balance = [5]float64{4.2, 2.1, 3.0, 3.2, 5.0}
    
    //忽略数组大小,Go 语言会根据元素的个数来设置数组的大小
    var balance = [...]float64{2.3, 3.4, 4.0}
    
    //简写赋值
    balance := [4]int{1, 2, 3,4}
    

    数组迭代

    • 数组元素的访问,数组元素可以通过索引(位置)来读取
    var balance = [5]int{1,2,3,4,5}
    for i := 0; i<5; i++ {
        fmt.Println("Element[%d] = %d\n", j, balance[i])
    }
    
    • for range方式迭代的性能可能会更好一些,因为这种迭代可以保证不会出现数组越界的情形,每轮迭代对数组元素的访问时可以省去对下标越界的判断。
        var times [5][0]int
        for range times {
            fmt.Println("hello")
        }
    
    • 数组不仅仅可以用于数值类型,还可以定义字符串数组、结构体数组、函数数组、接口数组、管道数组等等
    // 字符串数组
    var s1 = [2]string{"hello", "world"}
    var s2 = [...]string{"你好", "世界"}
    var s3 = [...]string{1: "世界", 0: "你好", }
    
    // 结构体数组
    var line1 [2]image.Point
    var line2 = [...]image.Point{image.Point{X: 0, Y: 0}, image.Point{X: 1, Y: 1}}
    var line3 = [...]image.Point{{0, 0}, {1, 1}}
    
    // 图像解码器数组
    var decoder1 [2]func(io.Reader) (image.Image, error)
    var decoder2 = [...]func(io.Reader) (image.Image, error){
        png.Decode,
        jpeg.Decode,
    }
    
    // 接口数组
    var unknown1 [2]interface{}
    var unknown2 = [...]interface{}{123, "你好"}
    
    // 管道数组
    var chanList = [2]chan int{}
    
    • 内置函数len可以用于计算数组的长度,cap函数可以用于计算数组的容量。不过对于数组类型来说,len和cap函数返回的结果始终是一样的,都是对应数组类型的长度。

    相关文章

      网友评论

          本文标题:golang数组

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