数组是同一种数据类型元素的集合。
数组声明时需要确定数组大小,一旦定义,不可修改。
数组的长度必须是常量,并且长度是数据类型的一部分。[5]int
和[3]int
是不同的类型。
数组索引从0
开始。
数组是值类型。
var 变量名 [数量]T
声明和初始化
func main() {
//数组声明
var a [5]int
var b [3]int
//数组赋值
a = [5]int{1,2,3,4,5}
b = [3]int{1}
fmt.Println(a) //[1 2 3 4 5]
fmt.Println(b) //[1 0 0]
fmt.Printf("a:%T b:%T\n", a, b) //a:[5]int b:[3]int
//数组声明又赋值
var c = [3]string{"a","b","c"}
fmt.Println(c) //[a b c]
//不填写长度,系统推导
var d = [...]int{1,3,4,5,6,7,8,9}
fmt.Println(d) //[1 3 4 5 6 7 8 9]
//根据索引值初始化
var e [20]int
e = [20]int{19:1}
fmt.Println(e) //[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1]
}
数组使用
func main() {
var c = [3]string{"a","b","c"}
//直接通过索引取数组中某个值
fmt.Println("c[1]=" + c[1])
// for遍历
for i := 0; i < len(c); i++ {
fmt.Printf("c[%d]=%s\n", i, c[i])
}
// for range遍历
for i := range c {
fmt.Printf("c[%d]=%s\n", i, c[i])
}
for i,v := range c {
fmt.Printf("c[%d]=%s\n", i, v)
}
}
注意,数组是值类型。
func main() {
a := [3]int{1, 2, 3}
b := a //把a拷贝一份给了b
b[0] = 11
fmt.Println(a) //[1 2 3]
fmt.Println(b) //[11 2 3]
a[1] = 22
fmt.Println(a) //[1 22 3]
fmt.Println(b) //[11 2 3]
}
多维数组声明和初始化
func main() {
var a [3][2]int
fmt.Println(a) // [[0 0] [0 0] [0 0]]
a = [3][2]int{
[2]int{1, 2},
[2]int{3, 4}}
a = [3][2]int{
{1, 2},
{3, 4}}
fmt.Println(a) // [[1 2] [3 4] [0 0]]
b := [3][2]int{
{1, 2},
{3, 4},
}
fmt.Println(b) // [[1 2] [3 4] [0 0]]
//第一层可以用...,其它层不可以用
c := [...][2]int{
{1, 2},
{3, 4},
}
fmt.Println(c) //[[1 2] [3 4]]
}
多维数组使用
func main() {
b := [3][2]int{
{1, 2},
{3, 4},
}
fmt.Println(b[1][1]) // 4
for i := 0; i < len(b); i++ {
for j := 0; j < len(b[i]); j++{
fmt.Printf("b[%d][%d]=%d\n", i, j, b[i][j])
}
}
for i, v1 := range b {
for j, v := range v1 {
fmt.Printf("b[%d][%d]=%d\n", i, j, v)
}
}
}
练习题
1.求数组所有元素的和
func main() {
// 求数组所有元素的和
var a = [5]int{1, 3, 5, 7, 8}
sum := 0
for _,v := range a {
sum += v
}
fmt.Printf("sum=%d\n", sum)
}
2.找出数组中和为指定值的两个元素的下标,比如从数组[1,3,5,7,8]找出和为8的两个元素的下标分别为(0,3)和(1,2)
func main() {
// 找出数组中和为指定值的两个元素的下标,比如从数组[1,3,5,7,8]找出和为8的两个元素的下标分别为(0,3)和(1,2)
s := 8
for i,v := range a {
for j := i + 1; j < len(a); j++ {
if v + a[j] == s {
fmt.Printf("(%d,%d)\n", i, j)
}
}
}
for i,v := range a {
other := s - v
for j := i + 1; j < len(a); j++ {
if i == j {
continue
}
if other == a[j] {
fmt.Printf("(%d,%d)\n", i, j)
}
}
}
}
有疑问加站长微信联系(非本文作者)