9-Golang复合数据类型-array(数组)

数组是具有相同类型的数据项组成的一组长度固定的序列,数据项叫做数组的元素,数组的长度必须是非负整数的常量,长度也是类型的一部分。

声明数组

Go 语言数组声明需要指定元素类型及元素个数,在数组声明后,其长度不可修改,数组的每个元素会根据对应类型的零值对进行初始化。语法格式如下:

var variable_name [SIZE]variable_type

例如以下定义了数组 balance 长度为 10 类型为 float32:
var balance [10]float32
package main

import "fmt"

func main() {
    /*
        数组定义: 相同数据类型组成一组固定长度的序列
        数组声明: 需要指定元素类型 和元素长度  零值为元素类型的零值
    */
    var arrayint [10]int
    var arraybool [5]bool
    var arraystring [10]string
    fmt.Printf("%T %v\n", arrayint, arrayint)
    fmt.Printf("%T %v\n", arraybool, arraybool)
    fmt.Printf("%T %q\n", arraystring, arraystring)
    fmt.Printf("%T %v\n", arraystring, arraystring)

    // 字面量   赋值是创建新的数组
    // 空  零值
    arrayint = [10]int{}
    fmt.Println(arrayint)

    // 按顺序赋值前几个
    arrayint = [10]int{10, 20, 30}
    fmt.Println(arrayint)

    // 根据索引赋值
    arrayint = [10]int{0: 10, 9: 20}
    fmt.Println(arrayint)

    //[...]int{1,2,3} 推导数组长度
    arrayint0 := [...]int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
    fmt.Println(arrayint0)

    // 简短声明
    arrayint2 := [10]int{}
    fmt.Printf("%T %v\n", arrayint2, arrayint2)

    arrayint3 := [10]int{10, 20, 30}
    fmt.Printf("%T %v\n", arrayint3, arrayint3)

    arrayint4 := [5]int{0: 1, 4: 5}
    fmt.Printf("%T %v\n", arrayint4, arrayint4)

    arrayint5 := [...]int{1, 2, 3}
    fmt.Printf("%T %v\n", arrayint5, arrayint5)
}

数组的操作

package main

import "fmt"

func main() {
    arrayint5 := [...]int{1, 2, 3}
    fmt.Printf("%T %v\n", arrayint5, arrayint5)
    // 操作
    // 长度不相等,不能做操作,会报错invalid operation: nums05 == nums06 (mismatched types [3]int and [5]int)
    // 关系运算
    arrayint6 := [3]int{1, 3, 4}
    //arrayint7 := [4]int{1, 22}
    //arrayint7 := [3]int{1, 3, 4}
    arrayint7 := [3]int{1, 3}
    fmt.Println(arrayint6 == arrayint7)

    // 获取数组的长度
    fmt.Println(len(arrayint7))

    // 访问 索引 0,1,2,...len(array)-1
    // 超出索引长度会报错 invalid argument: index 3 out of bounds [0:3]
    fmt.Println(arrayint5[0], arrayint7[0])
    arrayint5[0] = 1000
    fmt.Println(arrayint5)

    // 遍历数组
    for i := 0; i <= len(arrayint5)-1; i++ {
        fmt.Println(arrayint5[i])
    }
    for i, v := range arrayint5 {
        fmt.Println(i, v)
    }
    for _, v := range arrayint5 {
        fmt.Println(v)
    }

    // 切片  数组的切片是切片类型
    s := "123123123"
    fmt.Printf("%T\n", s[1:3])
    fmt.Printf("%T\n", arrayint5[0:2:3])
    /*
        长度和容量
        cap即capacity,容量,表示给数组分配的内存空间可以容纳多少个元素
        len即length,长度,指的是容器中目前有几个元素
        由于数组创建时就必须确定的元素个数,且不能改变长度,所以不需要预留多余的内存空间,因此cap和len对数组来说相等。
    */
}

多维数组

定义格式:

var variable_name [SIZE1][SIZE2]...[SIZEN] variable_type

声明二维的整型数组:
var twodim [10][4]int
二维数组中的元素可通过 twodim[ i ][ j ] 来访问。

示例:

package main

import "fmt"

func main() {
    //多维数组
    var marrays [3][2]int
    fmt.Printf("%T", marrays)
    fmt.Println(marrays)
    fmt.Println(marrays[0])
    fmt.Println(marrays[0][0])
    marrays[0] = [2]int{1, 3}
    fmt.Println(marrays)
    marrays[1][1] = 1000
    fmt.Println(marrays)

    var m3 [3][2][5]int
    fmt.Println(m3)

    marrays = [3][2]int{{1, 2}, {3, 4}}
    fmt.Println(marrays)

    for _, v := range marrays {
        for _, vv := range v {
            fmt.Print(vv, "\t")
        }
        fmt.Println()
    }
}
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容