9-数组

98 阅读1分钟

数组

  • 数组是同一种数据类型元素的集合。
  • 在Go语言中,数组从声明时就确定,使用时可以修改数组成员,但是数组大小不可变化
package main
import (
    "fmt"
)

func main() {
    var a [3] int
    var b [4] int
	
    fmt.Println(a);// [0 0 0]
    fmt.Println(b);// [0 0 0 0]

    // 数组的初始化
    // 1. 定义时使用初始值列表的方式初始化
    var cityArray = [4]string{"北京", "上海", "广州", "深圳"}
    fmt.Println(cityArray)// [北京 上海 广州 深圳]

    // 2. 编译推导数组的长度
    var boolArray = [...]bool{true, false, false, true, false}
    fmt.Println(boolArray)// [true false false true false]

    // 3. 使用索引值方式初始化
    var langArray = [...]string{1: "Golang", 3: "Python", 5: "JS"}
    fmt.Println(langArray, len(langArray))//  Golang  Python  JS] 6
    fmt.Printf("%T\n", langArray)// [6]string
}

数组遍历

  • for-range循环
package main
import (
    "fmt"
)

func main() {
    var cityArray = [4]string{"北京", "上海", "深圳", "香港"}
    // 1. for 循环
    for i:=0; i < len(cityArray); i++ {
        fmt.Println(cityArray[i])// "北京", "上海", "深圳", "香港"且没有乱码
    }

    // 2.for-range
    for index, value := range cityArray {
        fmt.Println(index, value)
    }

    // 2.1一个值
    for index := range cityArray {
        fmt.Println(index)// 0 1 2 3
    }
    // 2.2 _
    for _, value := range cityArray {
        fmt.Println(value)// "北京", "上海", "深圳", "香港"
    }
}

多维数组

  • 二维数组为例子
package main
import (
    "fmt"
)

func main() {
    // 二维数组
    a := [3][2]string{
        {"北京", "上海"},
        {"广州", "深圳"},
        {"成都", "重庆"},
    }
    fmt.Println(a) //[[北京 上海] [广州 深圳] [成都 重庆]]
    fmt.Println(a[2][1]) //支持索引取值:重庆

    // 二维数组的遍历
    for _, v1 := range a {
        for _, v2 := range v1 {
            fmt.Println(v2)
        }
    }

    // 编译器推导的方式只有最外层可以
    /*b := [...][2]string{
        {"北京", "上海"},
        {"广州", "深圳"},
        {"成都", "重庆"},
    }*/

    // 数组是值类型: 作为参数或者赋值给别的都是拷贝一份新的
    x := [3]int{1,2,3}
    fmt.Println(x)// [1 2 3]
    f1(x)
    fmt.Println(x)// [1 2 3]

    y := x
    y[0] = 20
    fmt.Println(x)// [1 2 3]
}

func f1(a [3]int) {
    a[0] = 10
}

image.png