前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Go语言示例学习03-数组/切片

Go语言示例学习03-数组/切片

作者头像
用户5252199
发布2022-04-18 18:41:08
2100
发布2022-04-18 18:41:08
举报

在Go中,数组是一个有固定长度且编号的元素序列

元素的类型和长度都是数组类型的一部分

创建一个数组a来存放刚好5个int,数组默认是零值,对于int数组来说也就是0

代码语言:javascript
复制
var a [5]int
fmt.Println(“arr”,a)

可以使用 array[index]=value 来设置数组指定位置的值

使用array[index] 来获取指定位置的值

代码语言:javascript
复制
var a [5]int
fmt.Println("emp", a)
fmt.Println("emp", len(a))
a[3] = 100
fmt.Println("emp", a[3])

使用内置函数len() 来读取数组的长度

数组类型是一维的,但是可以组合构建多维的数据结构

代码语言:javascript
复制
var arr [2][3]int
for i := 0; i < 2; i++ {
for j := 0; j < 3; j++ {
arr[i][j] = i + j
   }
}
fmt.Println("arr", arr)

二、切片(Slice)

Slice是Go中一个关键的数据类型,是一个比数组更加强大的序列接口

与数组不同,Slice的类型仅由它所包含的元素决定(不需要元素个数)

要创建一个长度非零的空Slice,需要使用内建的方法make

比如

创建一个长度为3的string类型slice

代码语言:javascript
复制
s := make([]string, 3)
fmt.Println(s)
s := make([]string, 3)
fmt.Println(s)
s[0] = "a"
s[1] = "b"
s[2] = "c"
fmt.Println("set",s)
fmt.Println("get",s[2])
fmt.Println("len",len(s))

除了基本操作之外,slice支持比数组更加丰富的操作,其中一个就是内置的append,它返回一个包含了一个或者多个新值的slice,ps:由于append可能返回新的slice,我们需要接收其新的返回值

代码语言:javascript
复制
s := make([]string, 3)
//fmt.Println(s)
s[0] = "a"
s[1] = "b"
s[2] = "c"
s = append(s,"d")
s = append(s,"e")
fmt.Println("slice val " , s)

slice也可以被copy,通过创建一个空的和s有相同长度的slice y。并且将s复制给y

代码语言:javascript
复制
y := make([]string,3)
copy(y,s)
fmt.Println("copy y is ",y)

slice可以通过slice[low:high] 语法进行“切片”操作。

比如

代码语言:javascript
复制
s := make([]string, 3)
s[0] = "a"
s[1] = "b"
s[2] = "c"
s = append(s,"d")
s = append(s,"e”) 
l := s[2:3]
fmt.Println(l)

三、关联数组

在Go语言中的关联数组,在其它的语言中叫做哈希(Hash)或者字典(dict)

首先要创建一个map,需要使用内置的make

代码语言:javascript
复制
make(map[key-type]val-type)

然后通过make[key]=val 方式来赋值

通过内置函数len() 来返回键值对的数目

代码语言:javascript
复制
fmt.Println(len(m))

通过内置的函数delete来删除指定键的值

代码语言:javascript
复制
delete(m, "a")
fmt.Println(m)

当从一个map中取值时,可选的第二返回值是指在这个map中是否存在该key,用来消除key不存在和key为零值的歧义

在这里不需要值,直接用空白标识符 _ 忽略

代码语言:javascript
复制
_, pro := m["a"]
fmt.Println(pro)

四、Range遍历

range迭代各种各样的数据结构。

range在数组和slice中提供对每项的索引和值的访问

在下面代码中,我们不需要打印出索引值所以可以用空白字符代替

代码语言:javascript
复制
x := []int{1,2,3,4}
sum := 0
for _,i := range x {
   sum += i
   fmt.Println(i)
   fmt.Println(sum)
}

当然也可以指定某个返回值为索引值

代码语言:javascript
复制
x := []int{1,2,3,4}
sum := 0
for s,i := range x {
   sum += i
   fmt.Println(i,s)
   fmt.Println(sum)
}

也可以用来访问map数组

代码语言:javascript
复制
kvs := map[string]string{"11":"22","22":"33"}
fmt.Println(kvs)
for k,v := range kvs {
   fmt.Println("k -----> v ",k,v)
}
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-09-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 大数据技术博文 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档