Go语言第十二课 数组

什么是数组

这是一个古老的数据结构概念了:

有序同类定长的集合就是数组。

如何定义?

最标准的:

var arry_a [3]int = [3]int{1,2,3}

其他的

var arry_a [3]int //这种情况下,arry_a的三个元素将被赋默认零值

var arry_a [3]int =[3]int{1,2}//这种情况下,arry_a[2]将被赋默认零值

arry_a := [...]int{1,2,3}

arry_a := [3]int{1,2,3}

* 注意[3]int与[4]int是不同类型,不能把[4]int类型的值赋给[3]int类型的变量

* 强调一点,golang里面只有值传递,没有引用传递。所谓值传递可以看成暴力的内存拷贝。这一点在数组传值上体现地特别明显!

package main

import "fmt"

func main() {
	a := [3]int{1, 2, 3}
	b := a
	b[0] = 100
	fmt.Println(a[0])
	fmt.Println(b[0])
}

输出

1

100

如何遍历?

通常是通过关键字range,也可以按下标遍历

package main

import "fmt"

func main() {
	a := [3]int{1, 2, 3}
	for value := range a {
		fmt.Println(value)
	}
	fmt.Println("----------------")
	for i := 0; i < len(a); i++ {
		fmt.Println(a[i])
	}
}

输出

0
1
2
----------------
1
2
3

关于==和!=

package main

import "fmt"

func main() {
	a := [3]int{1, 2, 3}
	a1 := [3]int{1, 2, 3}
	fmt.Println(a == a1)
	fmt.Println(a != a1)
	a2 := [3]int{1, 3, 2}
	fmt.Println(a == a2)
	fmt.Println(a != a2)
}

结果

true
false
false

true

这说明:当且仅当数组元素全部对应相等时,两个数组才相等,否则不等。

* 注意,由于[3]int与[4]int是不同类型,所以其值不可比较(会导致语法错误)!

关于make关键字

说起make就不得不说另一个关键字:new

package main

import (
	"fmt"
	"reflect"
	"strconv"
)

func main() {
	a := new([3]int)
	a[0] = 100
	a[1] = 200
	a[2] = 300
	b := make([]int, 3)
	fmt.Println(reflect.TypeOf(a).String() + "-->" + strconv.Itoa(len(a)))
	fmt.Println(reflect.TypeOf(b).String() + "-->" + strconv.Itoa(len(b)))

	for i := 0; i < len(a); i++ {
		fmt.Print(strconv.Itoa(a[i]) + " ")
	}
	fmt.Print("\n")
	for i := 0; i < len(a); i++ {
		fmt.Print(strconv.Itoa(b[i]) + " ")
	}
	fmt.Println("\n---------------------------------")
	for index, val := range a {
		fmt.Print(strconv.Itoa(index) + "->" + strconv.Itoa(val) + " ")
	}
	fmt.Print("\n")
	for index, val := range b {
		fmt.Print(strconv.Itoa(index) + "->" + strconv.Itoa(val) + " ")
	}
}

输出

*[3]int-->3
[]int-->3
100 200 300 
0 0 0 
---------------------------------
0->100 1->200 2->300 

0->0 1->0 2->0 

make只能建立slice,map和channel三种类型;new没有限制。

猜你喜欢

转载自blog.csdn.net/yongyu_it/article/details/80828688
今日推荐