Go学习笔记06-内建容器

Go语言
  • 数组
  • *切片(Slice) #F44336
  • Slice的操作
  • Map
  • map示例
  • 字符处理

数组

定义数组:

  1. //这样定义数组编译器自动初始化每个元素为0


  2. var arr1 [5]int 


  3. //这样定义数组需要手动初始化数组 

  4. arr2 := [3]int{1, 3, 5} 


  5. //这样可以让编译器自动计算数组长度 

  6. arr3 := [...]int{2, 4, 6, 8, 10} 


  7. //定义二维数组 

  8. var grid [4][5]bool 

·数量写在类型前面

遍历数组可用 for 循环语句,如:

  1. //用len()函数获取数组长度


  2. for i := 0;i < len(arr3); i++{ 

  3. fmt.Println(arr3[i]) 



可以用range关键字获取数组的下标和值

  1. //用 range 关键字获取数组的下标和值


  2. for i, v := range arr3{ 

  3. //i为数组下标,v为值 

  4. fmt.Println(i, v) 




  5. //只获取数值,下标值用 _ 代替 

  6. for _, v := range arr3{ 

  7. fmt.Println(v) 



Go语言中数组是值类型

  • [10]int和[20]int被视为不同的类型
  • 函数调用时会拷贝数组
  • Go语言中一般不直接使用数组

*切片(Slice)

定义一个数组 arr := […]int{0, 1, 2, 3, 4, 5, 6, 7}
那么 s := arr[2:6]就叫做数组arr的一个切片,其值为[2, 3, 4, 5]。

  1. arr := [...]int{0, 1, 2, 3, 4, 5, 6, 7}



  2. //获取数组arr下标从2~5的元素,不包括下标为6的元素 

  3. fmt.Println("arr[2:6] =", arr[2:6]) 

  4. //获取从第一个元素到下标为5的元素 

  5. fmt.Println("arr[:6] =", arr[:6]) 

  6. //获取从下标为2的元素及其后所有的元素 

  7. fmt.Println("arr[2:] =", arr[2:]) 

  8. //获取整个数组的元素 

  9. fmt.Println("arr[:] =", arr[:]) 

slice即切片不是值类型,切片是底层数组的一个视图(view),对切片做的变更会影响到原数组。

切片可以再对其进行reslice操作。

切片的扩展

Slice的操作

Slice添加元素

  1. arr := [...]int{0, 1, 2, 3, 4, 5, 6, 7}


  2. //s1 = [2, 3, 4, 5] 

  3. s1 := arr[2:6] 

  4. //s2 = [5, 6] 

  5. s2 := s1[3:5] 

  6. //s3 = [5, 6, 10] 

  7. s3 := append(s2, 10) 

  8. //s4 = [5, 6, 10, 11] 

  9. s4 := append(s3, 11) 

  10. //s5 = [5, 6, 10, 11, 12] 

  11. s5 := append(s4, 12) 


  12. //s4, s5是不同的数组的视图 

  • 添加元素时如果超越cap,系统会重新分配一个更大的底层数组
  • 由于是值传递,必须接收append的返回值

创建Slice

  1. //未初始化的Slice缺省值是 nil


  2. var s []int 


  3. //用make创建Slice,slice长度为6 

  4. s2 := make([]int, 6) 

  5. //用make创建Slice,slice长度为10,底层数组长度为32 

  6. s3 := make([]int, 10, 32) 

复制Slice

  1. //复制s1,并存储到s2中


  2. copy(s2, s1) 

Map

创建map

  1. //创建map,m := map[Key_Type]Value_Type


  2. m := map[string]string{ 

  3. "name": "Bob", 

  4. "course": "golang", 

  5. "site": "imooc", 

  6. "quality": "not bad" 




  7. //用make创建map,缺省值为 empty map 

  8. m2 := make(map[string]int) 


  9. //这样创建map,缺省值为nil 

  10. var m3 := map[string]int 

遍历Map

  1. //map的遍历同数组遍历操作


  2. for k, v := range m{ 

  3. fmt.Println(k, v) 



获取元素

  1. courseName := m["course"]



  2. //用此方法可以判断map中是否含有key为cause的值 

  3. if causeName, isOk := m["cause"]; isOk{ 

  4. fmt.Println(causeName) 

  5. }else { 

  6. fmt.Println("Key does not exisit.") 



删除元素

  1. //用delete删除map元素


  2. delete(m, "name") 

map小结


map示例

题干:寻找最长不含有重复字符的子串的长度
如:abcabcbb -> abc
bbb -> b
pwwkew -> wke

  1. package main



  2. import "fmt" 


  3. func lengthOfNoneRepeatSubStr(s string) int{ 

  4. last := make(map[byte]int) 

  5. start := 0 

  6. maxLength := 0 


  7. for i, ch := range []byte(s){ 

  8. if lastI, isOk := last[ch]; isOk && lastI >= start { 

  9. start = lastI + 1 



  10. if i - start + 1 > maxLength{ 

  11. maxLength = i - start + 1 



  12. last[ch] = i 




  13. return maxLength 




  14. func main() { 

  15. fmt.Println(lengthOfNoneRepeatSubStr("abcabcbb")) 

  16. fmt.Println(lengthOfNoneRepeatSubStr("kkkkkkkkk")) 

  17. fmt.Println(lengthOfNoneRepeatSubStr("pwwkew")) 

  18. fmt.Println(lengthOfNoneRepeatSubStr("0123456789")) 



字符处理

在Go语言中,rune相当于char类型

  1. package main



  2. import "fmt" 


  3. func main(){ 

  4. s := "Yes青青子衿悠悠我心" 

  5. for _, b := range []byte(s){ 

  6. fmt.Printf("%X ", b) 




  7. for i, ch := range s{ 

  8. fmt.Printf("(%d, %X) ", i, ch) 




  9. fmt.Println() 



  • 使用utf8.RuneCountInString获取字符数量
  • 使用len获取字节长度
  • 使用[]byte获取字节

寻找最长不含有重复字符的子串的长度支持中文字符版本

  1. package main



  2. import "fmt" 


  3. func lengthOfNoneRepeatSubStr(s string) int{ 

  4. last := make(map[rune]int) 

  5. start := 0 

  6. maxLength := 0 


  7. for i, ch := range []rune(s){ 

  8. if lastI, isOk := last[ch]; isOk && lastI >= start { 

  9. start = lastI + 1 



  10. if i - start + 1 > maxLength{ 

  11. maxLength = i - start + 1 



  12. last[ch] = i 




  13. return maxLength 




  14. func main() { 

  15. fmt.Println(lengthOfNoneRepeatSubStr("abcabcbb")) 

  16. fmt.Println(lengthOfNoneRepeatSubStr("kkkkkkkkk")) 

  17. fmt.Println(lengthOfNoneRepeatSubStr("pwwkew")) 

  18. fmt.Println(lengthOfNoneRepeatSubStr("0123456789")) 



有关字符的操作在包 strings 中。

转载于:https://www.cnblogs.com/vocaloid-fan1995/p/10566866.html

Go学习笔记06-内建容器相关推荐

  1. Python学习笔记:常用内建模块7XML

    前言 最近在学习深度学习,已经跑出了几个模型,但Pyhton的基础不够扎实,因此,开始补习Python了,大家都推荐廖雪峰的课程,因此,开始了学习,但光学有没有用,还要和大家讨论一下,因此,写下这些帖 ...

  2. Python学习笔记:常用内建模块5

    前言 最近在学习深度学习,已经跑出了几个模型,但Pyhton的基础不够扎实,因此,开始补习Python了,大家都推荐廖雪峰的课程,因此,开始了学习,但光学有没有用,还要和大家讨论一下,因此,写下这些帖 ...

  3. Python学习笔记:常用内建模块2:collections

    前言 最近在学习深度学习,已经跑出了几个模型,但Pyhton的基础不够扎实,因此,开始补习Python了,大家都推荐廖雪峰的课程,因此,开始了学习,但光学有没有用,还要和大家讨论一下,因此,写下这些帖 ...

  4. golang学习笔记之--Go语言内建容器

    话接上文 <golang学习笔记之--Go语言基本语法> 今天继续记录学习笔记,今天的笔记主题是Go语言内建容器 如果各位童鞋想要获得下面的源码,请搜索gzh:隔壁王小猿,关注后回复&qu ...

  5. MySQL学习笔记06【多表查询、子查询、多表查询练习】

    MySQL 文档-黑马程序员(腾讯微云):https://share.weiyun.com/RaCdIwas 1-MySQL基础.pdf.2-MySQL约束与设计.pdf.3-MySQL多表查询与事务 ...

  6. Flutter学习笔记(10)--容器组件、图片组件

    如需转载,请注明出处:Flutter学习笔记(10)--容器组件.图片组件 上一篇Flutter学习笔记(9)--组件Widget我们说到了在Flutter中一个非常重要的理念"一切皆为组件 ...

  7. 机器学习实战(Machine Learning in Action)学习笔记————06.k-均值聚类算法(kMeans)学习笔记...

    机器学习实战(Machine Learning in Action)学习笔记----06.k-均值聚类算法(kMeans)学习笔记 关键字:k-均值.kMeans.聚类.非监督学习 作者:米仓山下 时 ...

  8. JavaWeb黑马旅游网-学习笔记06【旅游线路分页展示分页展示】

    Java后端 学习路线 笔记汇总表[黑马程序员] JavaWeb黑马旅游网-学习笔记01[准备工作] JavaWeb黑马旅游网-学习笔记02[注册功能] JavaWeb黑马旅游网-学习笔记03[登陆和 ...

  9. JavaWeb-综合案例(用户信息)-学习笔记06【复杂条件查询功能】

    Java后端 学习路线 笔记汇总表[黑马程序员] JavaWeb-综合案例(用户信息)-学习笔记01[列表查询] JavaWeb-综合案例(用户信息)-学习笔记02[登录功能] JavaWeb-综合案 ...

  10. JavaScript学习笔记06【高级——JavaScript中的事件】

    w3school 在线教程:https://www.w3school.com.cn JavaScript学习笔记01[基础--简介.基础语法.运算符.特殊语法.流程控制语句][day01] JavaS ...

最新文章

  1. CRMEB v4目录结构说明
  2. 熊吃人该不该杀?这头3米高的大熊吃了7个人,还在洞里藏了很多女人用的东西.........
  3. 文档管理 linux,Linux 文档管理
  4. UDID被禁用后的集中替代品
  5. python抓取教学_Python Selenium 实战教学:爬取每日天气
  6. 37. 错误与异常处理(1)
  7. 有趣 的java代码_[分享]几段有趣的JAVA代码
  8. Python项目实战-----科比数据集分析
  9. 面试智力题精选:扑克牌问题
  10. 错误的SQL脚本,错误消息 4104
  11. OSS回源的几种方式和应用场景
  12. Windows10 Windows Store安装 应用商店重新安装
  13. 神来之笔--图解JVM内存分配及对象存储
  14. 服务器Ping值代表着什么?
  15. 60分钟搞定JAVA加解密
  16. python的pyecharts(群图乱舞)可视化神器
  17. 《PHASEN:A Phase and Harmonics-Aware Speech Enhancement Network》Pytorch代码学习Ⅱ
  18. 让ImageView尺寸适应图片比例和屏幕
  19. 头歌python 身份证号的奥秘
  20. 推荐几个优质的公众号!

热门文章

  1. 【讲大道理】参加什么信息学比赛对升学有帮助?
  2. android studio环境配置
  3. 【入门】ffmpeg、nginx、nginx-http-flv-module转发rtsp流、VLC查看
  4. 《战地情人》对白摘录
  5. 永恒之蓝漏洞复现(ms17-010)----保姆级教程
  6. Ubuntu使用有线网卡连接开发板,同时使用无线网卡上网
  7. 阿里云 ECS 监控报警设置
  8. 手写memcpy函数
  9. 【Redis】缓存雪崩、缓存穿透、缓存击穿
  10. 网际互联及TCP/IP 协议OSI七层模型: 物理层、数据链路层、网络层、传输层、会话层、表示层、应用层