【Go】Go基础(六):数组、切片slice、映射map

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010168781/article/details/89158222
1、数组
1.1 数组定义

数组:数组是具有相同 唯一类型 的一组已编号且长度固定的数据项序列。
数组长度必须是一个常量表达式,并且必须是一个非负整数。数组长度也是数组类型的一部分,所以[5]int和[10]int是属于不同类型的。数组长度最大为 2Gb

1.2 遍历

方法一:
for i:=0; i < len(arr1); i++ {
arr1[i] = …
}
方法二:
for i,_:= range arr1 {
arr1[i] = …
}

2、切片
2.1 切片定义

切片:切片(slice)是对数组一个连续片段的引用,所以切片是一个引用类型(因此更类似于 C/C++ 中的数组类型,或者 Python 中的 list 类型)。
这个片段可以是整个数组,或者是由起始和终止索引标识的一些项的子集。需要注意的是,终止索引标识的项不包括在切片内。
切片是一个 长度可变的数组。

2.2 切片常用函数

len():获取切片长度
cap():获取切片可以设置的最大长度,它等于切片的长度 + 数组除切片之外的长度,0 <= len(s) <= cap(s)

2.3 切片声明:
var slice1 []type
2.4 切片初始化:
var slice1 []type = arr1[start:end]
var slice1 []type = arr1[:] 
var slice1 []type = make([]type, len)
slice1 := make([]type, len)
2.5 bytes 包
定义长度可变的buffer
	var buffer bytes.Buffer
或者使用new分配
	var r *bytes.Buffer = new(bytes.Buffer)
2.6 For-range 结构
for i, value := range slice1 {
	...
}
2.7 切片重组(reslice)
slice1 := make([]type, start_length, capacity)

其中 start_length 作为切片初始长度而 capacity 作为相关数组的长度。

2.8 切片的复制与追加

copy函数:切片复制
append函数:切片追加

2.9 字符串、数组和切片的应用

从字符串生成字节切片:
c := []byte(s)
copy(dst []byte, src string)
r := []rune(s) //类型为 rune 的切片存储Unicode字符串

字符串:
* 一个字符串实际上是一个双字结构,即一个指向实际数据的指针和记录字符串长度的整数
* Go 语言中的字符串是不可修改

修改字符串中的某个字符:
先将字符串转换成字节数组,然后再通过修改数组中的元素值来达到修改字符串的目的,最后将字节数组转换回字符串格式。
s := “hello”
c := []byte(s)
c[0] = ‘c’
s2 := string© // s2 == “cello”

sort 包:搜索及排序切片和数组:

* sort.Ints(arri):对int类型的切片做升序排序
* IntsAreSorted(a []int) bool:是否已经排序
* func SearchInts(a []int, n int) int:搜索,必须先排好序再搜索
* func Float64s(a []float64)	:排序float64
* func Strings(a []string):排序字符串

append 函数常见操作:

* 将切片 b 的元素追加到切片 a 之后:a = append(a, b...)
* 复制切片 a 的元素到新的切片 b 上:b = make([]T, len(a)); copy(b, a)
* 删除位于索引 i 的元素:a = append(a[:i], a[i+1:]...)
*切除切片 a 中从索引 i 至 j 位置的元素:a = append(a[:i], a[j:]...)
* 为切片 a 扩展 j 个元素长度:a = append(a, make([]T, j)...)
* 在索引 i 的位置插入元素 x:a = append(a[:i], append([]T{x}, a[i:]...)...)
* 在索引 i 的位置插入长度为 j 的新切片:a = append(a[:i], append(make([]T, j), a[i:]...)...)
* 在索引 i 的位置插入切片 b 的所有元素:a = append(a[:i], append(b, a[i:]...)...)
* 取出位于切片 a 最末尾的元素 x:x, a = a[len(a)-1], a[:len(a)-1]
* 将元素 x 追加到切片 a:a = append(a, x)
3、map
3.1 map定义

map 是一种元素对(pair)的无序集合;

3.2 声明:
var map1 map[keytype]valuetype
var map1 map[string]int

注意:
key 可以是任意可以用 == 或者 != 操作符比较的类型,比如 string、int、float。所以数组、切片和结构体不能作为 key

3.3 初始化:

map 是引用类型的;内存用 make 方法来分配,永远不要使用 new 来构造 map;
map 的初始化:var map1 = make(map[keytype]valuetype)。
或者简写为:map1 := make(map[keytype]valuetype)。

3.4 测试和删除

测试键值是否存在
map返回两个值,后一值类型为bool表示,键值是否存在

if _, ok := map1[key1]; ok {
	// ...
}

删除键值:delete(map1, key1)

3.5 可以使用 for 循环构造 map:
for key, value := range map1 {
	...
}

猜你喜欢

转载自blog.csdn.net/u010168781/article/details/89158222