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]

注意:

  1. 数组支持 "=="、"!="操作符,因为内存总是被初始化过的。
  2. [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)
			}
		}
	}
}

 

posted @ 2020-10-16 00:35  LinuxCBB  阅读(84)  评论(0)    收藏  举报