Golang之数组

数组的定义

数组是具有相同数据类型的数据项组成的一组固定长度的序列,数据项叫数组的元素。

数组的声明

需要指定组成元素类型和存储数量,在数组声明后,长度是不可修改,数组的元素会根据对应类型的零值来初始化的。

package main

import (
    "fmt"
)

func main() {
    var names [10]string  // 定义长度为10的字符串数组
    var ages [10]int  // 定义长度为10的整型数组
    fmt.Printf("%T, %T\n", names, ages)  // 打印类型
    fmt.Printf("%#v, %#v\n", names, ages) 
    fmt.Println(names)
    fmt.Println(ages)
}

结果

[10]string, [10]int
[10]string{"", "", "", "", "", "", "", "", "", ""}, [10]int{0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
[         ]
[0 0 0 0 0 0 0 0 0 0]

初始化

有三种方法定义: 1、指定数组长度:[length]type{xx,xxx,xxxx} 2、使用初始化元素数量推到数组长度:[…]type{xx,xx,xx} 3、对指定位置元素进行初始化:[length]type{1:xx,2:xx}

package main
    
import (
    "fmt"
)
    
func main() {
    var users1 [3]string = [3]string{"a1", "a2", "a3"}
    users2 := [...]int{1, 2, 3}
    users3 := [2]string{"users3"}
    users4 := [3]int{1:2}
    fmt.Printf("类型:%T,内容:%#v\n", users1, users1)
    fmt.Printf("类型:%T,内容:%#v\n", users2, users2)
    fmt.Printf("类型:%T,内容:%#v\n", users3, users3)
    fmt.Printf("类型:%T,内容:%#v\n",users4, users4)
    
}

结果:

类型:[3]string,内容:[3]string{"a1", "a2", "a3"}
类型:[3]int,内容:[3]int{1, 2, 3}
类型:[2]string,内容:[2]string{"users3", ""}
类型:[3]int,内容:[3]int{0, 2, 0}

操作

1、关系运算(== !=)

package main

import (
    "fmt"
)

func main() {
    nums := [3]int{1,2,3}
    fmt.Println(nums == [...]int{1,2,3})
    fmt.Println(nums != [...]int{1,2,3})
}

结果

true
false

2、获取数组长度

用len函数可获取数组的长度

package main

import (
    "fmt"
)

func main() {
    nums := [3]int{1,2,3}
    fmt.Println(len(nums))
}

结果

3

3、访问和修改数组

利用索引可对数组进行访问和修改

package main

import (
    "fmt"
)

func main() {
    nums := [3]int{1,2,3}
    fmt.Println(nums[0])
    nums[0] = 0
    fmt.Println(nums)
}

结果

1
[0 2 3]

4、切片

array[start:end]/array[start:end:cap](end<=cap<=len)获取数组的一部分元素叫做切片

package main

import (
    "fmt"
)

func main() {
    nums := [...]int{1,2,3,4,5,6,7,8,9}
    fmt.Println(nums[1:5])
    fmt.Printf("%T, %#v\n", nums[1:3:3], nums[1:3:3])
}

结果

[2 3 4 5]
[]int, []int{2, 3}

5、遍历

1、通过for len方式

package main

import (
    "fmt"
)

func main() {
    nums := [...]int{1,2,3,4,5,6,7,8,9}
    for i := 0; i < len(nums); i++ {
        fmt.Println(nums[i])
    }
}

2、通过for range方式(range返回两个元素分别为元素的索引和值)

package main

import (
    "fmt"
)

func main() {
    nums := [...]int{1,2,3,4,5,6,7,8,9}
    for i, v := range nums {
        fmt.Println(i, v)
    }
}

多维数组

和数组类似,区别在于元素也可以是数组类型的,声明和初始化都和数组一样。