Go 数据类型(六)数组

数组的声明和初始化

var a [8]byte // 长度为8的数组,每个元素为一个字节
var b [3][3]int // 二维数组(9宫格)
var c [3][3][3]float64 // 三维数组
var d = [3]int{1, 2, 3}  // 声明时初始化
var e = new([3]string)   // 通过 new 初始化

a := [5]int{1,2,3,4,5}
a := [...]int{1, 2, 3}    // 自动计算数组长度
// 如果没有填满,则空位会通过对应的元素类型零值填充:
a := [5]int{1, 2, 3} // [1 2 3 0 0]
//还可以初始化指定下标位置的元素值,未设置的位置也会以对应元素类型的零值填充:
a := [5]int{1: 3, 3: 7} // [0 3 0 7 0]
数组元素的访问与设置
arr := [5]int{1,2,3,4,5}
a1, a2 := arr[0], arr[len(arr) - 1]
arr[0] = 100
数组的遍历
  • for循环:
for i := 0; i < len(arr); i++ {
    fmt.Println("Element", i, "of arr is", arr[i])
}
  • for range循环:
for i, v := range arr { 
    fmt.Println("Element", i, "of arr is", v) 
}//对于i, v,如果不需要可以通过匿名变量"_"替代
多维数组
// 通过二维数组生成九九乘法表
var multi [9][9]string
for j := 0; j < 9; j++ {
    for i := 0; i < 9; i++ {
            n1 := i + 1
            n2 := j + 1
            if n1 < n2 {  // 摒除重复的记录
                continue
            }
            multi[i][j] = fmt.Sprintf("%dx%d=%d", n2, n1, n1 * n2)
        }
  }

// 打印九九乘法表
for _, v1 := range multi {
    for _, v2 := range v1 {
        fmt.Printf("%-8s", v2)  // 位宽为8,左对齐
    }
    fmt.Println()
}
数组的缺点:
  • 长度固定,无法动态添加元素
  • 数组为值类型,作为参数传递到函数时,传递的为值的拷贝
  • 在函数中对数组元素进行修改后,不会影响原来的数组
  • 数组很大时,值拷贝会降低程序性能
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容