golang的array/slice
相同点
- 由相同类型的元素组合构成
- 元素有序排列,0为第一个元素下标
- 基本使用方法相同
区别
array声明时需要指定容量大小,而且无法修改
slice可通过append增加元素,当容量不够时,会自动扩容
array传递类型:值拷贝;slice传递类型:引用拷贝(有两种情况坑)
声明
var array名 [容量]元素类型
array名 :=[3]元素类型{元素1,元素2,元素3} var slice名 []元素类型
slice名 := make([]类型,容量) //建议这样声明
slice名 := []元素类型{元素1,元素2,元素3}
// array或者slice声明后,各元素并不为空,而是该元素类型的 *零 *值 //array声明时还可以让编译器自动导入元素容量
array名 := [10]int{5:199, 8:200} //多维array/slice
//由相同元素类型构成的array/slice 为元素构成的array结构 array名 := [3][2]int{{1,2},{3,5},{9,2}}
slice名 := [][]int{{1,2},{3,5},{9,2}} //元素赋值
a[index] = 值
array/slice容量属性len/cap
- len
- len()方法获取array/slice的元素个数
- cap
- cap()方法获取array/slice的最大值可存储元素个数
根据开始我们说的array和slice特性
array: len和cap值时相等的
slice:初始化时,len和cap值是相等的,当append操作达到当前cap临界点时,cap值会增大
此时,len与cap的值是不相等的
array/slice遍历
- 方法一
for index, value := rang a{
fmt.Println(index, value)
} - 方法二
for index := range a{
fmt.Println(a[index])
} - 方法三
//len()获取array元素数量
for i :=0; i<len(a); i++{
fmt.Println(a[i])
} - 多维遍历
b := [3][2]int{{1,2},{3,5},{9,2}}
for index, value := range b{
for i, v := range value{
fmt.Println(index, i. v)
}
} - 切片操作
a := [5]int{10, 20, 30, 40, 50} //取出前三个元素, 坐标分别是 0, 1, 2
b := a[0:3]
bb := a[:3] //取出第三个元素之后所有元素(包含第3个元素)
c := a[2:] //取出第2, 3, 4 三个元素
d := a[1:4]
s1 := []int{1, 2}
s2 := s1
fmt.Println(s1[0])
fmt.Println(s2[0])
s1[0] = 100
fmt.Println(s1[0])
fmt.Println(s2[0])
temp := []int{5, 6, 7, 8, 9, 10, 11, 12, 13, 14}
s1 = append(s1, temp...)
s1[0] = 1000
fmt.Println(s1[0])
fmt.Println(s2[0])
golang的array/slice的更多相关文章
- golang array, slice, string笔记
本来想写一篇关于golang io的笔记,但是在学习io之前必须了解array, slice, string概念,因此将在下篇写golang io. array: 数组的长度是该数组类型的一部分, ...
- golang之array
golang使用array表示固定大小的数组,使用slice表示动态数组. package main import "fmt" func main() { var a = [5]i ...
- golang笔记——array
1.定义一个 array 数组长度也是类型的一部分,比如长度为3的int数组与长度为5的int数组,并不是同一类型. package main import ( "strconv" ...
- JS之Array.slice()方法
1.Array.slice(startIndex,endIndex); 返回由原始数组从startIndex到endIndex-1的元素构成的新数组; startIndex:默认值0,如果startI ...
- javascript:Array.slice.call 到Array.prototype.slice.call
举个从对象到数组的例子: var obj={}; obj[1]=1; obj[2]=2; obj.length=2; var arr =Array.prototype.slice.call(obj); ...
- [js] Array.slice和类数组转数组
a.call(b) 相当于把a方法放到b的原型上(实例私有方法)执行 Array.slice的用途 https://juejin.im/post/5b20b8596fb9a01e8d6a47c0 用法 ...
- Array.slice(start,end)的用法
start在start>=0,假设start=0,表示从数组的第一个元素开始截取,start=2,表示从数组的第二个元素开始截取,依次类推. 在start<0时,start=-1表示从倒数 ...
- JS - Array.slice 与 Array.splice
1)Array.slice方法 1.1)接收两个参数: a:起始下标 b:结束下标 1.2)返回由a(包括)至b(不包括)的元素所组成的数组 ...
- golang中Array与Slice
在golang中有数组和Slice两种数据结构,Slice是基于数组的实现,是长度动态不固定的数据结构,本质上是一个对数组字序列的引用,提供了对数组的轻量级访问.那么在go的函数中以数组或Slice为 ...
随机推荐
- hadoop下远程调试方法
JPDA 简介Sun Microsystem 的 Java Platform Debugger Architecture (JPDA) 技术是一个多层架构,使您能够在各种环境中轻松调试 Java 应用 ...
- Robot Framework-断言函数
测试用例的目的是要验证一些操作否符合我们的预期结果,所以在测试用例中,断言函数是必不可少的一项.我们做的每一步操作都会有预期的结果,为了保证操作得到的结果符合预期,我们需要在测试用例中添加断言,来保证 ...
- openssl 查看证书细节
打印证书的过期时间 openssl x509 -in signed.crt -noout -dates 打印出证书的内容: openssl x509 -in cert.pem -noout -text ...
- DIV,CSS学习
如何将页脚固定在页面底部 http://web.jobbole.com/10408/
- RabbitMQ消息的消费与持久化
作为消费者的客户端要消费Rabbitmq的消息,首先要建立与它某个队列的连接,具体连接时可指定队列的BindingKey和关系的exchange标识,Rabbitmq判断若已有队列通过BindingK ...
- @RequestParam和@RequestBody的区别-------springMVC
https://blog.csdn.net/qq_27093465/article/details/50519444 @RequestParam 1,用来处理Content-Type: 为 appli ...
- ecmall2.3.0 前后台样式等无效,导致前台页面显示不正常问题解决
问题一:按照安装手册安装及数据初始化后,前后台中文均出现乱码 解决方法:在upload/index.php 和 upload/admin/index.php 头上加上header("Cont ...
- myeclipse部署maven项目到tomcat,src/main/resources里面配置文件部署不到webapp下classes
解决myeclipse部署maven时,src/main/resources里面配置文件加载不到webapp下classes路径下的问题. 有时候是src/main/resources下面的,有时候是 ...
- warning: backslash and newline separated by space [enabled by default]
警告:反斜杠和换行符之间多了空格. 这种问题出现在宏定义 #define,并且有多行,每行之间要用 “\” 连接起来. 解决办法:删除 “\” 后面的空格,直接紧跟回车.
- VMware下安装的Mac OS X如何修改显示分辨率 (转)
我在Win7下利用VMware安装了苹果的OS x 10.8系统,安装成功启动后,发现分辨率为1024*768,而宿机的分辨率是1440*900,我想让虚拟机全屏显示,也就是想在雪豹下屏幕的分辨率也能 ...