博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Go语言的array,slice及map
阅读量:6244 次
发布时间:2019-06-22

本文共 1385 字,大约阅读时间需要 4 分钟。

  hot3.png

array类型

var myarray [10]int    //定义数组变量,此时myarray所有元素被初始化为0

myarray=[10]int{0,1,2,3,4,5,6,7}    //初始化,此时必须为[10]int,之后myarray[8]=myarray[9]=0

也可以将以上两步合为一步:

var myarray [10]int=[10]int{1,2,3,4,5,6,7,8}    //定义10个长度的数组并用8个变量初始化

array是固定长度的数组,这个和C语言中的数组是一样的,使用前必须确定数组长度。与C中的数组相比,有极大的不同:

1 Go中的数组是值类型。

如果你将一个数组赋值给另外一个数组,那么,实际上就是将整个数组拷贝一份,两份数组,存在与不同的内存空间。

2 作为形参,实际传递的是数组的拷贝。

注意不是数组的指针。在函数中对数组值的修改实际对该数组无效。

3 array的长度也是Type的一部分。

即[10]int和[20]int是不一样的。不能相互赋值。

array的结构用图示表示是这样的:Len Data...

len表示数组的长度,后面的int储存的是实际数据

slice类型

直接建立:
    s := make([]int, 10)    //创建了名为s 的有10个元素(长度等于10)的整数类型切片
    s := []int{1,2,3,4,5}    //创建了名为s 的有5个元素的整数类型切片,并赋值为1,2,3,4,5
间接建立:
先建数组a 再用数组建切片s
var a [10]int
s :=a[1:5]           //创建了名为s 的,长度为4,容量为10的整数类型切片
                        //切片s 指向数组a[1],a[2], a[3],a[4]当切片值改变,数组值也会变
也可以重新指定:
s = a[0:8]           //s 指向数组a[0]...a[7]
s = s[2:5]           // s 指向原切片的 s[2],s[3],s[4]三个元素。

                         //用[x:y]时总会指向x 至 y -1个元素

1 slice是可变长的

用append函数可增加切片的长度
s := []int{1,2,3}     //建切片s
s = append(s, 4, 5)   //为切片s 增加两元素
,并赋值为4和5 
也可以追加一个切片
a := []int{6, 7}      
//建切片a
s = 
append(s,a...)    //
为切片s
 
追加切片a (记得后面的三个点)
因为Go语言中数组长度是类型的一部分
它把不同长度的数组视为不同的类型
例:
i:=[]int{1,2,3}
p:=[]int{1,2}
i与p都是整数型数组但长度不一样,被视为不同类型,
所以在addend(s,a...)中如果没有(...)就会被视为加入不同类型而出错

2 slice是指针(引用)而不是值

指针比值可就小多了,因此,我们将slice作为函数参数传递比将array作为函数参数传递会更有性能。

slice是一个指针,它指向的是一个array机构,它有两个基本函数len和cap。

看下面的图示:

slice是一个带有point(指向数组的指针),Len(数组中实际有值的个数),Cap(数组的容量)

转载于:https://my.oschina.net/acmfly/blog/89813

你可能感兴趣的文章
非监督学习算法:异常检测
查看>>
Linux coredump
查看>>
Ubuntu 10.04安装水晶(Mercury)无线网卡驱动
查看>>
我的友情链接
查看>>
ElasticSearch 2 (32) - 信息聚合系列之范围限定
查看>>
VS2010远程调试C#程序
查看>>
windows查看端口占用
查看>>
Yii用ajax实现无刷新检索更新CListView数据
查看>>
App 卸载记录
查看>>
JavaScript变量和作用域
查看>>
开源SIP服务器加密软件NethidPro升级
查看>>
Apache Pulsar中的地域复制,第1篇:概念和功能
查看>>
南京大学周志华教授当选欧洲科学院外籍院士
查看>>
计算机网络与Internet应用
查看>>
oracle在线迁移同步数据,数据库报错
查看>>
linux性能剖析工具
查看>>
flutter中的异步
查看>>
计算机高手也不能编出俄罗斯方块——计算机达人成长之路(16)
查看>>
# 2017-2018-1 20155224 《信息安全系统设计基础》第七周学习总结
查看>>
scikit-learn预处理实例之一:使用FunctionTransformer选择列
查看>>