01、定义数组 和 数组类型说明
--数组定义:
--存放元素的有容器
--必须指定存放的元素的类型和容量(长度),也就是说数组是复合类型其准确的类型 == 长度 + 数据类型
--数组类型 == 长度 + 数据类型
-数组长度固定,但是切片长度可变。因此数组使用的范围比较窄多用切片存储数据
--代码示例:这里主要是关于数组类型 和 如何获取变量类型演示
var a1 [3]bool // true true false
var a2 [4]bool // true false true false
// 打印变量类型
fmt.Printf("a1: %T a2: %T\n", a1, a2)
*************** 输出 ****************
a1: [3]bool a2: [4]bool
--不同类型的数组之间不可相互赋值,即使数据类型一致长度不一致也不行
var s1 [3]int
var s2 [4]int
s1 = s2
*************** 输出 ****************
.\test.go:8:5: cannot use s2 (type [4]int) as type [3]int in assignment
--必须当数据类型一致,数据长度一致,数组之间才能相互赋值
var s1 [3]int
var s2 [3]int
s1 = s2
02、数组初始化
--数组如果不初始化,初始值一般为0 0.0 flase等值
--代码示例如下:
var s1 [3]int
var b1 [2]bool
fmt.Println(s1, b1)
****************** 数组默认值 ********************
[0 0 0] [false false]
--数组初始化:
--代码示例如下:
// 初始化方式1:少量数据直接赋值
var a1 [3]bool
a1 = [3]bool{true, true, true}
fmt.Println(a1)
// 初始化方式2:数组值非常多的时候,得数完个数才能给出数组长度是不方便的,因此直接使用[...]
// 根据初始值推断数据长度
a100 := [...]int{1, 2, 3, 4, 5, 6, 7, 312, 345, 456, 8756}
fmt.Println(a100)
// 初始方式3:定义数组长度,但是赋值部分数据其余全部按照默认值填充
a3 := [5]int{1, 2}
fmt.Println(a3)
// 初始方式4:按照给定的索引进行初始化,这里给0 4位置进行赋值
a4 := [5]int{0: 1, 4: 45}
fmt.Println(a4)
03、数组的遍历
--两种遍历方式,代码示例如下:
citys := [...]string{"beijing", "shanghai", "nanjing", "shenzhen", "changsha"}
// 遍历方式1: 按照索引进行遍历
for i := 0; i < len(citys); i++ {
fmt.Println(citys[i])
}
// 遍历方式2: 按照for range进行遍历
for i, v := range citys {
fmt.Println(i, v)
}
04、多维数组 定义 赋值 和 遍历
--定义 和 赋值:
// 初始数组
var all [3][2]int
// 数组赋值,记住,不能省略
all = [3][2]int{
[2]int{1, 2},
[2]int{3, 4},
[2]int{5, 6},
}
fmt.Println(all)
--遍历:for range
// 多位数组的遍历
for _, v := range all {
for _, v1 := range v {
fmt.Println(v, v1)
}
}
05、数组是值类型:复制以后两个数组之间占有独立的内存空间,修改不会相互影响
--代码示例如下:
b1 := [3]int{
1, 2, 3,
}
b2 := b1
b2[0] = 100
fmt.Println(b1, b2)
*************** 输出结果 *****************
[1 2 3] [100 2 3]
06、数组练习题
--题目如下:
--1、遍历数组元素并求和
--2、取出元素中两个和为8的元素,并打印出来
a1 := [...]int{1, 2, 3, 6, 7, 8}
// 对a1中元素遍历求和
sum := 0
for _, v := range a1 {
sum = sum + v
}
fmt.Println(sum)
// 取出a1中两个和为8的元素
for i, v := range a1 {
for j, v1 := range a1 {
if j > i {
if v+v1 == 8 {
fmt.Println(v, v1)
}
}
}
}