关于golang:golangleetcode专项训练数组与切片

56次阅读

共计 1363 个字符,预计需要花费 4 分钟才能阅读完成。

概念

在 golang 中,数组和切片是两个概念

数组

数组是一个由固定长度的特定类型元素组成的序列,一个数组能够由零个或多个元素组成。

能够应用 len()函数获取数组的长度

切片

因为数组的长度是固定的,因而在 Go 语言中很少间接应用数组。和数组对应的类型是 Slice(切片),它是能够增长和膨胀的动静序列,slice 性能也更灵便。

除了长度,切片多了容量属性,能够通过应用内置的 len()函数求长度,应用内置的 cap()函数求容量。

雷同

都能够间接通过下标的形式拜访元素

区别

初始化

数组

a := [3]int{1,2,3} // 指定长度
//or
a := [...]int{1,2,3} // 不指定长度
//or
a := [...]int{99: -1}// 指定初始化,只有最初一个元素初始化为 -1,其余为 0 

数组能够拓展到多维数组

// 申明一个二维整型数组,两个维度的长度别离是 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}}

切片

s := make([]int) // 创立一个长度为 0,容量为 0 的切片
s := make([]int, 3, 5)// 指定长度和容量
//or
s := []int{1,2,3} // 不指定长度

切片同样能够拓展到多维切片

// 申明一个二维切片
var slice [][]int
// 为二维切片赋值
slice = [][]int{{10}, {100, 200}}

增加元素

尽管数组在初始化时也能够不指定长度,但 Go 语言会依据数组中元素个数主动设置数组长度,并且不可扭转。

切片更像是一个动静的数组,能够通过 append 办法减少元素:

s := []int{1,2,3} //s = {1,2,3}
s = append(s, 4) //s = {1,2,3,4}
// 增加多个元素
s = append(s, 1, 2, 3) // 追加多个元素, 手写解包形式
s = append(s, []int{1,2,3}...) // 追加一个切片, 切片须要解包

如果将 append 用在数组上,你将会收到报错:first argument to append must be slice。

复制

数组
在 Go 语言中,数组变量代表的是整个数组
所以在 Go 语言中,当数组变量 B 被赋值数组变量 A 时,实际上是数组变量 B 齐全复制了一份数组 A 数据,而不是数组变量 A 和数组变量 B 指向同一份数据。

切片
Go 语言的内置函数 copy() 能够将一个数组切片复制到另一个数组切片中,如果退出的两个数组切片不一样大,就会依照其中较小的那个数组切片的元素个数进行复制。

copy(slice2, slice1) // 复制 slice1 到 slice2 中

其中 slice2, slice1 指向同一个数组
详见 https://segmentfault.com/a/11…

函数传递

当切片和数组作为参数在函数(func)中传递时,数组传递的是值,而切片传递的是指针。因而当传入的切片在函数中被扭转时,函数外的切片也会同时扭转。雷同的状况,函数外的数组则不会产生任何变动。

正文完
 0