数组(瓶子)是同一种数据类型元素(水)的集合。 在Go语言中,数组从声明时就确定,使用时可以修改数组成员,但是数组大小不可变化。 基本语法:
var 数组变量名 [元素数量]T
例子:
// 定义一个长度为3元素类型为int的数组a
var a [3]int
数组定义
1、存放元素的容器
2、必须指定存放的元素的类型和容量(长度)
3、数组的长度是数组类型的一部分
package main
import "fmt"
//数组
//存放元素的容器
//必须指定存放的元素的类型和容量(长度)
//数组的长度是数组类型的一部分
func main() {
var a1 [3]bool // [true false true]
var a2 [4]bool // [true true false false]
fmt.Printf("a1:%T a2:%T", a1, a2)
}
数组的初始化
package main
import "fmt"
//数组
//存放元素的容器
//必须指定存放的元素的类型和容量(长度)
//数组的长度是数组类型的一部分
func main() {
var a1 [3]bool // [true false true]
var a2 [4]bool // [true true false false]
fmt.Printf("a1:%T a2:%T\n", a1, a2)
//数组的初始化
//如果不初始化,默认元素都是零值(布尔值:false,整型和浮点型都是0,字符串:"")
fmt.Println(a1, a2)
//方式1
a1 = [3]bool{true, true, true}
fmt.Println(a1)
//方式2
//根据初始值自动推断数组的长度是多少
a10 := [...]int{1, 2, 3, 4, 5, 6, 7, 8, 9}
fmt.Println(a10)
//方式3
//根据索引来初始化
a3 := [5]int{0: 1, 4: 2}
fmt.Println(a3)
}
数组的遍历
package main
import "fmt"
//数组
//存放元素的容器
//必须指定存放的元素的类型和容量(长度)
//数组的长度是数组类型的一部分
func main() {
//数组的遍历
citys := [...]string{"北京", "上海", "深圳"}
//根据索引遍历
for i := 0; i < len(citys); i++ {
fmt.Println(citys[i])
}
//for range遍历
for i, v := range citys {
fmt.Println(i, v)
}
}
多维数组
package main
import "fmt"
func main() {
//多位数组
//[[1,2][3,4][5,6]]
var a11 [3][2]int
a11 = [3][2]int{
{1, 2},
{3, 4},
{5, 6},
}
fmt.Println(a11)
//多维数组的遍历
for _, v1 := range a11 {
fmt.Println(v1)
for _, v2 := range v1 {
fmt.Println(v2)
}
}
}
注意: 多维数组只有第一层可以使用...
来让编译器推导数组长度。
数组是值类型
值类型: 也就是Ctrl+c Ctrl+v 赋值和传参会复制整个数组 就像是把word文档从文件夹a拷贝到文件夹b
package main
import "fmt"
func main() {
//数组是值类型
//值类型: 也就是Ctrl+c Ctrl+v 赋值和传参会复制整个数组 就像是把word文档从文件夹a拷贝到文件夹b
b1 := [3]int{1, 2, 3} // [1 2 3]
b2 := b1 // [1 2 3] Ctrl+c Ctrl+v
b2[0] = 100 // b2: [100 2 3]
fmt.Println(b1, b2) //b1:?
}
注意
- 数组支持 “==“、”!=” 操作符,因为内存总是被初始化过的。
- [n]*T表示指针数组,*[n]T表示数组指针 。
练习
package main
import "fmt"
//array数组练习题
//1、求数组[1, 3, 5, 7, 8]所有元素的和
//2、找出数组中和为指定值的两个元素的下标,比如从数组[1, 3, 5, 7, 8]中找出和为8的两个元素的下标分别为(0,3)和(1,2)。
func main() {
// 1.求数组[1, 3, 5, 7, 8]所有元素的和
a1 := [...]int{1, 3, 5, 7, 8}
//把数组中的每一个元素遍历出来,累加到一个宿命变量就可以了
sum := 0
for _, v := range a1 {
sum = sum + v
fmt.Println(sum)
}
fmt.Println(sum)
//2、找出和为8的两个元素的下标分别为(0,3)和(1,2)。
//定义两个for循环,外层的从第一个开始遍历
//内层的for循环从外层后面的哪个开始找
//他们两个的和为8
for i := 0; i < len(a1); i++ {
for j := i + 1; j < len(a1); j++ {
if a1[i]+a1[j] == 8 {
fmt.Printf("(%d,%d)\n", i, j)
}
}
}
}
参考链接
https://www.liwenzhou.com/posts/Go/05_array/
转载请注明:Adminxe's Blog » GO语言学习–数组