go基础——数组array

package main

import "fmt"

/*
        数组:
        array数组属于值类型,存储的是数值本身,数据传递给其他变量时传递的是数据的副本。
        slice,map等属于引用类型,存储的是数据的内存地址。
*/
func main() {
        //数组创建和访问
        var arr1 [4]int //创建数组,定长
        arr1[0] = 1
        arr1[1] = 2
        arr1[2] = 3
        arr1[3] = 4
        fmt.Println(arr1[0], arr1[2])
        //长度和容量,array/map/slice/string通用
        fmt.Println(len(arr1)) //长度,容器中实际存储的数据量
        fmt.Println(cap(arr1)) //容量,容器中能够存储的最大数据量
        fmt.Println("==============")

        //数组的其他创建方式
        var arr2 = [5]int{1, 2, 3} //未定义的位置为0
        fmt.Println(arr2)

        var arr3 = [5]int{1: 1, 3: 2}
        fmt.Println(arr3)

        var arr4 = [5]string{"rose", "小王", "ruby"} //未定义的位置为空字符串
        fmt.Println(arr4)

        arr5 := [...]int{1, 2, 3}
        arr6 := [...]int{1: 4, 5: 3}
        fmt.Println(len(arr5), cap(arr5))
        fmt.Println(len(arr6), cap(arr6))

        fmt.Println("==============")

        //数组的遍历
        for i := 0; i < len(arr1); i++ {
                arr1[i] = arr1[i]*2 + 1
        }
        fmt.Println(arr1)

        for i, v := range arr1 {
                fmt.Printf("下标%d,数值%d\n", i, v)
        }

        fmt.Println("==============")

        //数组的排序(冒泡)
        arr := [5]int{15, 23, 8, 10, 7}
        for i := 1; i < len(arr); i++ {
                for j := 0; j < len(arr)-i; j++ {
                        if arr[j] > arr[j+1] {
                                arr[j], arr[j+1] = arr[j+1], arr[j]
                        }
                }
        }
        fmt.Println(arr)
        fmt.Println("==============")

        //二维数组
        a := [2][3]int{{1, 2, 3}, {4, 5, 6}}
        fmt.Println(a[0][1]) //第一个一维数组中的第二个元素
        //遍历
        for i := 0; i < len(a); i++ {
                for j := 0; j < len(a[i]); j++ {
                        fmt.Print(a[i][j], "\t")
                }
                fmt.Println() //换行
        }
        //range遍历
        for _, arr_v1 := range a {
                for _, val := range arr_v1 {
                        fmt.Print(val, "\t")
                }
                fmt.Println()
        }
}

执行结果

1 3
4
4
==============
[1 2 3 0 0]
[0 1 0 2 0]
[rose 小王 ruby  ]
3 3
6 6
==============
[3 5 7 9]
下标0,数值3
下标1,数值5
下标2,数值7
下标3,数值9
==============
[7 8 10 15 23]
==============
2
1       2       3
4       5       6
1       2       3
4       5       6