总目录:https://www.jianshu.com/p/e406a9bc93a9
Golang - 子目录:https://www.jianshu.com/p/8b3e5b2b4497
数组
数组是同一种数据类型元素的集合。 在Go语言中,数组从声明时就确定,使用时可以修改数组成员,但是数组大小不可变化。
定义数组
语法
var 变量名 [长度]数组元素类型
例子:
package main
import "fmt"
func main() {
//数组
//存放元素的容器
//必须指定存放的类型与容量
var arr1 [3]int
var arr2 [4]int
}
注意事项:
数组的类型与其长度相关联。
package main
import "fmt"
func main() {
var arr1 [3]int
var arr2 [4]int
fmt.Printf("arr1:%T arr2:%T\n", arr1, arr2)
}
----------
arr1:[3]int arr2:[4]int
数组的初始化
数组的初始化有三种方式,第一种是在定义时直接指定,第二种是让编译器自动识别长度,第三种是指定索引初始化。
package main
import "fmt"
func main() {
var arr1 [3]int
var arr2 [4]int
// 数组初始化
// 如果不初始化,默认元素是0(布尔值是false,数值型是0,字符串是“)
fmt.Println(arr1, arr2)
// 初始化一
arr1 = [3]int{1,3}
fmt.Println(arr1)
// 初始化二 根据初始值自动推断数组长度是多少
arr100 := [...]int{1, 2, 31, 4, 234, 34, 532, 45}
fmt.Println(arr100)
// 初始化三 根据索引初始化
arr4 := [5]int{0: 1, 4: 2}
fmt.Println(arr4)
}
----------
[0 0 0] [0 0 0 0]
[1 3 0]
[1 2 31 4 234 34 532 45]
[1 0 0 0 2]
遍历数组
遍历数组就要使用for循环了,但是因为遍历的是复合数据类型,所以就有了两种遍历方式。
package main
import "fmt"
func main() {
// 数组的遍历
citys := [...]string{"北京", "上海", "深圳"}
// 1.根据索引遍历
for i := 0; i < len(citys); i++ {
fmt.Println(citys[i])
}
// 2.for range遍历
for i, v := range citys {
fmt.Println(i, v)
}
}
----------
北京
上海
深圳
0 北京
1 上海
2 深圳
多维数组
Go语言是支持多维数组的,我们这里以二维数组为例.
多维数组的定义
package main
import "fmt"
func main() {
//多维数组
var arrs = [3][3]int{{1, 2, 3}, {4, 5, 6}, {7, 8, 9}}
fmt.Println(arrs)
}
----------
[[1 2 3] [4 5 6] [7 8 9]]
多维数组的遍历
package main
import "fmt"
func main() {
//多维数组
var arrs = [3][3]int{{1, 2, 3}, {4, 5, 6}, {7, 8, 9}}
fmt.Println(arrs)
//多维数组的遍历
for _, v1 := range arrs {
for _, v2 := range v1 {
fmt.Println(v2)
}
}
}
----------
[[1 2 3] [4 5 6] [7 8 9]]
1
2
3
4
5
6
7
8
9
数组是值类型
就是说引用了数组之后,拷贝数组与原数组之间没有关系了。
package main
import "fmt"
func main() {
//数组是值类型
//这句话翻译成Python语言就是 数组是 不可变数据类型
arr5 := [3]int{1,2,3}
arr6 := arr5
arr6[0] = 10
fmt.Println("arr5:",arr5)
fmt.Println("arr6:",arr6)
}
----------
arr5: [1 2 3]
arr6: [10 2 3]
练习题
package main
import "fmt"
func main() {
//数组练习题
//1.求数组[1,3,5,7,8]所有元素的和
//2.找出数组中和为指定值的两个元素的下标
//例如:和为8的两个元素下标分别为(0,3)和(1,2)
arrays := [...]int{1,3,5,7,8}
//1
sum := 0
for _,v := range arrays{
sum = sum + v
}
fmt.Println(sum)
//2
for i := 0;i<len(arrays);i++{
for j:=i+1;j<len(arrays);j++{
if arrays[i] + arrays[j] == 8{
fmt.Printf("(%d,%d)\n",arrays[i],arrays[j])
}
}
}
}
网友评论