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 包
定义长度可变的buffervar 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 {...
}

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

  1. js中数据结构数组Array、映射Map、集合Set、对象、JSON

    全栈工程师开发手册 (作者:栾鹏) js系列教程5-数据结构和算法全解 js中数据结构 js中原生自带的数据结构比较简单,主要有数组Array.映射Map.集合Set.我们可以根据这三个基本数据结构实 ...

  2. 元组Tuple、数组Array、映射Map

    一.元组Tuple 元组Tuple是不同类型的值的聚集,元组的值将单个的值包含在圆括号中来构成,元组可以包含一个不同类型的元素 如 val riple = (100, "Scala" ...

  3. numpy基础——对数组切片操作

    创建 首先创建一个多维数组: a = numpy.arange(24).reshape((2,3,4)) print(a) 结果是: [[[ 0  1  2  3]   [ 4  5  6  7]   ...

  4. golang 判断 数组 切片 是否为空

    实例: package mainfunc main() {// 数组arr := [0]int{}if len(arr) == 0 {println(`这是个空数组`)}// 切片slice := m ...

  5. Numpy学习笔记三——数组切片、bool索引、掩码和花哨索引

    Numpy数组切片.bool索引.掩码和花哨索引 数组切片(slice) 数组切片的公式为 my_array[start: end: step, start: end: step] #示例1: imp ...

  6. Go开发 之 容器(数组Array、切片slice、映射map、列表list)

    文章目录 0.唠唠叨叨 1.数组-Array 1.1.什么是数组 1.1.1.数组的声明 1.1.2.比较两个数组是否相等 1.1.3.示例 1.1.3.1.通过索引下标访问元素 1.1.3.2.数组 ...

  7. go语言基础数据结构学习---- 数组, 列表(list)和切片(slice)

    go语言基础数据结构学习–> 数组, 列表(list)和切片(slice) go 语言中的 数组是类型相同的元素的集合, 列表是双链表的容器, 可以添加不同类型的数据切片是对现有数组的引用, 比 ...

  8. Golang的数组、切片、映射的理解

    1.数组         go的数组是值类型,赋值和传参操作都会复制整个数组数据,因此一般使用指针在函数间传递大数组. 如果数组长度不确定,可以使用 ... 代替数组的长度,编译器会根据元素个数自行推 ...

  9. 卷毛0基础学习Golang-基础-slice切片

    卷毛0基础学习Golang-基础-slice切片 持续更新中---- 切片简述 数组的长度在定义之后无法再次修改:数组是值类型,每次传递都将产生一份副本.显然这种数据结构无法完全满足开发者的真实需求. ...

  10. go数组Array和切片Slice全面简述理解

    小聊:本文是小白刚学习 golang 时候的总结,在基本学习了解之上的特性比较与讨论,go的数组有什么不同?切片又有什么好处?怎么去区分它们的使用?外加一些知识的拓展,有利于加深对 go 的 Arra ...

最新文章

  1. 航空机票预订c#代码_航空公司座位预订问题的C ++程序
  2. window访问不到linux的activemq_springboot整合开源项目测试拦截接口访问的频率
  3. python判断_python的判断
  4. 在线求CR,你觉得我这段Java代码还有优化的空间吗?
  5. py2exe使用方法 (含一些调试技巧,如压缩email 类)(转)
  6. ABAQUS中的非线性分析
  7. Arch 定制化安装与美化
  8. matlab卡住了 打不开,win7系统matlab打不开无法运行的解决方法
  9. 谁说大专生不能够学好Java呢?照着这个路线走,高中生都可以!
  10. java电子配件公司仓库管理系统计算机毕业设计MyBatis+系统+LW文档+源码+调试部署
  11. 算24点我的算法分享
  12. 黑马程序员rocketmq第一章
  13. 任意分布的随机数的产生方法
  14. 纯css修改图标颜色的五种方式
  15. C语言中的运算符及优先级
  16. 刷机升级Android版本,ROM之家简析:Android手机系统怎么升级
  17. 王振堂:今年收购PC厂商 宏碁要超联想成老三
  18. WORD点击索引目录提示错误信息
  19. linux log rotation日志滚动详解
  20. PostgreSQL表的查询(难度适中)

热门文章

  1. AI视频行为分析系统项目复盘——技术篇3:tensorRT技术梳理
  2. 深度学习(7)卷积神经网络
  3. MySQL拦截器获取xml id_关于mybatis拦截器,有谁知道怎么对结果集进行拦截,将指定字段查询结果进行格式化...
  4. c++ to_string用法
  5. fflush(stdin)和fflush(stdout)和rewind(stdin)的区别和作用
  6. Udacity机器人软件工程师课程笔记(十四)-运动学-正向运动学和反向运动学(其一)
  7. 【只需4步】windows server系统下快速安装绿色版apache-tomcat-8.0.35(免安装版)
  8. 使用git更新github上的开源项目
  9. c# .netframwork 4.0 调用 2.0时报错 混合模式程序集是针对“v2.0.50727”版的运行时生成的,在没有配置其他信息的情况下,无法在 4.0 运行时中加载该程序集。...
  10. bzoj 3598 [ Scoi 2014 ] 方伯伯的商场之旅 ——数位DP