【原创】go语言学习(七)数组
目录
- 数组定义
- 二维数组
- 数组拷贝、传参
数组定义
1. 数组是同一类型的元素集合。
var a [3]int //定义一个数组 //Go中数组下标从0开始,因此⻓长度为n的数组下标范围:[0,n-1] //整数组中的元素默认初始化为0,字符串串数组中的元素默认初始化为””
2. 数组初始化
var a [3]int
a[0] = 10
a[1] = 20
a[2] = 30
//数组初始化
var a [3]int = [3]int{10, 20, 30}
//定义时数组初始化
a := [3]int{10, 20, 30}
//定义时数组初始化
a := […]int{10, 20, 30}
//定义时数组初始化
a := [3]int{10}
//定义时数组初始化
a := [3]int{2:10}
//定义时数组初始化
3. 数组⻓长度是类型的一部分
var a [3]int a[0] = 10 a[1] = 20 a[2] = 30 var b [5]int b = a //a、b是不同类型的数组,不能赋值
4、len内置函数
var a [3]int a[0] = 10 a[1] = 20 a[2] = 30 fmt.Printf(“len:%d\n”, len(a)) //a、b是不同类型的数组,不能赋值
5. 数组遍历
var a [3]int
a[0] = 10
a[1] = 20
a[2] = 30
for i := 0; i < len(a); i++ {
}
//a、b是不同类型的数组,不能赋值
var a [3]int
a[0] = 10
a[1] = 20
a[2] = 30
for index, val := range a {
}
//a、b是不不同类型的数组,不不能赋值
二维数组
1、 二维数组
var a [3][2]int
a[0][0] = 10
a[0][1] = 20
a[1][0] = 30
a[1][1] = 30
a[2][0] = 30
a[2][1] = 30
for index, val := range a {
}
//a、b是不不同类型的数组,不不能赋值
2、二维数组(二)
// 数组遍历写法二
func testArra10() {
// 数组 a [长度]类型
// 定义完成, 值为[0,0,0,100,300],指定特定下标
a := [5]int{3: 100, 4: 300}
for index, value := range a {
fmt.Printf("a[%d]=%d\n", index, value)
}
}
3、二维数组(三)
// 二维数组定义
func testArra11() {
var a [3][2]int
a[0][0] = 10
a[0][1] = 20
a[1][0] = 30
a[1][1] = 40
a[2][0] = 50
a[2][1] = 60
fmt.Println(a)
// 遍历二维数组
for i := 0; i < 3; i++ {
for j := 0; j < 2; j++ {
fmt.Printf("%d", a[i][j])
}
fmt.Println()
}
//遍历方式二
fmt.Println("other method")
for i, val := range a {
// %v自动匹配格式输出,行
fmt.Printf("row[%d]=%v\n", i, val)
for j, val2 := range val {
fmt.Printf("(%d,%d)=%d", i, j, val2)
}
}
}
数组拷贝、传参
1、数组是值类型
var a [3]int a[0] = 10 a[1] = 20 a[2] = 30 b := a //b拷贝了了数组a中所有元素 b[0] = 1000 fmt.Println(a, b)
2、 数组是值类型,函数传参也会拷贝
// 值类型,copy为全拷贝,改变b不会影响a
func testArra12() {
a := [3]int{10, 20, 30}
b := a
b[0] = 1000
fmt.Printf("a=%v\n", a)
fmt.Printf("b=%v\n", b)
}
// int类型都是值类型,copy为全拷贝,改变b不会影响a
func testArray13() {
var a int = 1000
b := a
b = 3000
fmt.Printf("a=%d b=%d\n", a, b)
}
// 数组传参为copy
func modify(b [3]int) {
b[0] = 1000
}
例子:
package main
import (
"fmt"
"math/rand"
"time"
)
func sumArray(a [10]int) int {
var sum int = 0
//第一种遍历
for i := 0; i < len(a); i++ {
sum = sum + a[i]
}
//第二种遍历, _ 屏蔽下标
//for _, val := range a{
// sum = sum + val
//}
return sum
}
// 随机10数相加
func testArraySum() {
//初始化随机种子,time.Now().Unix()纳秒时间
rand.Seed(time.Now().Unix())
var b [10]int
for i := 0; i < len(b); i++ {
//b[i] = i
//随机 rand
// 产生一个0到999的随机数
b[i] = rand.Intn(1000)
// 产生一个0到Int最大值的随机数
// b[i] = rand.Int()
}
sum := sumArray(b)
fmt.Printf("sum=%d\n", sum)
}
// 两个元素之和,等于8 target的下标
func TwoSum(a [5]int, target int) {
for i := 0; i < len(a); i++ {
other := target - a[i]
for j := i + 1; j < len(a); j++ {
if a[j] == other {
fmt.Printf("(%d, %d)\n", i, j)
}
}
}
}
//
func testTwoSum() {
// var b [5]int = [5]int{1,3,5,8,7}
// b := [5]int{1,3,5,8,7}
b := [...]int{1, 3, 5, 8, 7}
TwoSum(b, 8)
}
func main() {
//sumArray()
//testArraySum()
testTwoSum()
}

浙公网安备 33010602011771号