Go数组
数组
数组是一段连续的空间,是同一种数据类型元素(这种类型可以是任意的原始类型例如整形、字符串或者自定义类型)的集合,数组从声明时就确定,使用时可以修改数组成员,但是数组大小不可变化
数组可以通过下标进行访问,下标是从0开始,最后一个元素下标是:len-1
package main
import "fmt"
func main() {
//数组声明 var 数组名 [长度] 元素的数据类型
var arr [4]int
fmt.Println(arr)
//初始化方式1
arr[0] = 1
arr[1] = 2
arr[2] = 3
fmt.Println(arr)
fmt.Println(arr[1])
//初始化方式2
var arr2 = [3]string{"a", "b", "c"}
fmt.Println(arr2)
//初始化方式3
var arr3 = [...]string{"a", "b", "c"}
fmt.Println(arr3)
//索引设值
var arr4 = [5]int{0: 111, 2: 222}
fmt.Println(arr4)
}
结果
[0 0 0 0]
[1 2 3 0]
2
[a b c]
[a b c]
[111 0 222 0 0]
数组遍历
package main
import "fmt"
func main() {
a5 := [...]string{"a","b","c"}
//方法一,根据索引遍历
for i := 0; i < len(a5); i++ {
fmt.Println(a5[i])
}
//方法二,for range遍历
for i, v := range a5 {
fmt.Println(i, v)
}
}
结果
a
b
c
0 a
1 b
2 c
多维数组(数组中嵌套数组)
数组定义
//以二维数组为例
package main
import "fmt"
func main() {
var a1 [3][2]int
a1 = [3][2]int{
[2]int{1,2},
[2]int{3,4},
[2]int{5,6},
}
fmt.Println(a1)
fmt.Println(a1[2][1])
}
结果
[[1 2] [3 4] [5 6]]
6
注意: 多维数组只有第一层可以使用...来让编译器推导数组长度。
package main
import (
"fmt"
)
func main() {
// var a1 [3][2]int
a1 := [...][2]int{
[2]int{1, 2},
[2]int{3, 4},
[2]int{5, 6},
}
fmt.Println(a1)
fmt.Println(a1[2][1])
}
多维数组遍历
package main
import "fmt"
func main() {
var a1 [3][2]int
a1 = [3][2]int{
[2]int{1,2},
[2]int{3,4},
[2]int{5,6},
}
fmt.Println(a1)
for _, v1 := range a1 {
fmt.Println(v1)
for _, v2 := range v1 {
fmt.Println(v2)
}
}
}
结果
[[1 2] [3 4] [5 6]]
[1 2]
1
2
[3 4]
3
4
[5 6]
5
6
方法二
package main
import "fmt"
func main() {
var a1 [3][2]int
a1 = [3][2]int{
[2]int{1,2},
[2]int{3,4},
[2]int{5,6},
}
for i := 0; i < len(a1); i++ {
for a := 0; a < len(a1[i]); a++ {
fmt.Println(a1[i][a])
}
}
}
数组是值类型
赋值和传参会复制整个数组。因此改变副本的值,不会改变本身的值。
package main
import (
"fmt"
)
func main() {
b1 := [3]int{1,2,3}
b2 := b1
b2[0] = 100
fmt.Println(b1, b2)
}
结果
[1 2 3] [100 2 3]
注意:
- 数组支持 "=="、"!="操作符,因为内存总是被初始化过的。
- [n]*T表示指针数组,*[n]T表示数组指针
练习
求数组[1, 3, 5, 7, 8]所有元素的和
package main
import "fmt"
func main() {
b1 :=[...]int{1, 3, 5, 7, 8}
var a int = 0
for i := 0; i < len(b1); i++ {
a += b1[i]
}
fmt.Printf("%d\n",a)
}
找出数组中和为指定值的两个元素的下标,比如从数组[1, 3, 5, 7, 8]中找出和为8的两个元素的下标分别为(0,3)和(1,2)。
package main
import "fmt"
func main() {
b1 :=[...]int{1, 3, 5, 7, 8}
for i :=0; i < len(b1); i++ {
for j := i + 1; j < len(b1); j++ {
if b1[i]+b1[j] == 8 {
fmt.Printf("(%d, %d)\n", i, j)
}
}
}
}

浙公网安备 33010602011771号