Go数组(多维)及Slice切片

一个数组是由零个或多个元素组成,因为Go语言中的数组长度是固定的,所以不会之间使用,在Go语言中,和数组对应的类型是Slice(切片),Slice 是可以增长和收缩的动态序列,功能也更灵活。 数组的每个元素可以通过索引下标来访问,索引下标的范围是从0开始到数组长度减1的位置。内置的len函数将返回数组中元素的个数。

一维数组

//一维数组的声明:var 数组变量名 [元素数量]Type
package main

import "fmt"
//定义一个长度为4的数组
var a = [4]int{
     1, 2, 3, 4}
//...是根据初始化值的个数来定义
//var a = [...]int{1, 2, 3, 4}
//var c = [...]int{4:-1} --> [0,0,0,-1]
func main() {
     
    /*
    数组值的修改: 数组变量名[索引] = 修改的值
    数组比较:==等于;!=不等
    */
    //for循环打印出数组的索引i与值v
	for i, v := range a {
     
		fmt.Printf("%d-%d\n", i, v)
	}
	//for循环打印出数组的值v,_是将其索引丢弃
	for _, v := range a {
     
		fmt.Printf("%d\n", v)
	}
}

多维数组

//多维数组声明:var array_name [size1][size2]...[sizen] array_type
package main

import (
	"fmt"
)
//定义多维数组
//var b [3][3]int = [...][3]int{
     {1, 2, 3}, {4, 5, 6}, {7, 8, 9}}
var b [3][3]int = [3][3]int{
     {
     1, 2, 3}, {
     4, 5, 6}, {
     7, 8, 9}}
func main() {
     
	/*
	// 声明一个二维整型数组,两个维度的长度分别是 4 和 2
	var array [4][2]int
	// 使用数组字面量来声明并初始化一个二维整型数组
	array = [4][2]int{
     {10, 11}, {20, 21}, {30, 31}, {40, 41}}
	// 声明并初始化数组中索引为 1 和 3 的元素
	array = [4][2]int{1: {20, 21}, 3: {40, 41}}
	// 声明并初始化数组中指定的元素
	array = [4][2]int{1: {0: 20}, 3: {1: 41}}
	修改数组值 
	*/
	//循环打印多维数组: 数组变量名[索引][索引] = 修改的值
	for i, v := range b {
     
		for j, z := range v {
     
			fmt.Printf("%d-%d-%d\n", i, j, z)
		}
	}
}

切片Slic

/*
切片语法:slice [开始位置 : 结束位置]
语法说明如下:
slice:表示目标切片对象;
开始位置:对应目标切片对象的索引;
结束位置:对应目标切片的结束索引
使用方法:
slice[开始位置:] -->截取开始位置到数组的最后一个元素
slice[:结束位置] -->截取从开始元素到结束位置
slice[开始位置:结束位置] -- >截取从开始位置到结束位置的数组元素
slice[:] --> 生成与原数组一样的切片
slice[0:0] -->生成切片将为空
*/
package main

import "fmt"
//定义数组
var a = [4]int{
     1, 2, 3, 4}

func main() {
     
	//对数组进行切片
	fmt.Println(a[1:4])
}

直接声明新的切片

/*
声明切片:var name []Type
其中 name 表示切片的变量名,Type 表示切片对应的元素类型。
*/
package main

import "fmt"

func main() {
     
	// 声明字符串切片
	var strList []string
	// 声明整型切片
	var numList []int
	// 声明一个空切片
	var numListEmpty = []int{
     }
	// 输出3个切片
	fmt.Println(strList, numList, numListEmpty)
	// 输出3个切片大小
	fmt.Println(len(strList), len(numList), len(numListEmpty))
	// 切片判定空的结果
	fmt.Println(strList == nil) //ture
	fmt.Println(numList == nil) //ture
	fmt.Println(numListEmpty == nil) //false 
	//numListEmpty 已经被分配到了内存,但没有元素,因此和 nil 比较时是 false
	numList = append(numList, 1, 2)//使用append向切片中添加元素
}

使用make()函数构造切片

/*
语法:make( []Type, size, cap )
其中 Type 是指切片的元素类型:
size 指的是为这个类型分配多少个元素
cap 为预分配的元素数量,这个值设定后不影响 
size,只是能提前分配空间,降低多次分配空间造成的性能问题
*/
package main

import "fmt"

func main() {
     
	a := make([]int, 2)
	b := make([]int, 2, 10)
	fmt.Println(a, b)           //[0 0] [0 0]
	fmt.Println(len(a), len(b)) //2 2
	//使用append向切片中添加元素
	a = append(a, 1, 2, 3)
	fmt.Println(a) //[0 0 1 2 3]
}

append为切片添加元素

package main

import "fmt"

var a []int

func main() {
     
	a = append(a, 1) //在切片末尾添加一个元素
	fmt.Println(a) //[1]
	a = append(a, 1, 2) //在切片末尾添加两个元素
	fmt.Println(a) //[1,1,2]
	a = append(a, []int{
     1, 2, 3}...) //在切片末尾添加一个切片
	fmt.Println(a) //[1,1,2,1,2,3]
	a = append([]int{
     0},a...) //在切片开头添加一个元素
	fmt.Println(a) //[0,1,1,2,1,2,3]
	a = append([]int{
     -1,-2},a...) //在切片开头添加一个切片
	fmt.Println(a) //[-1 -2 0 1 1 2 1 2 3]
}

你可能感兴趣的:(Go,Go数组,Go切片,Go多维数组)