相同点

  • 由相同类型的元素组合构成
  • 元素有序排列,0为第一个元素下标
  • 基本使用方法相同

区别

array声明时需要指定容量大小,而且无法修改

slice可通过append增加元素,当容量不够时,会自动扩容

array传递类型:值拷贝;slice传递类型:引用拷贝(有两种情况坑)

声明

  1. var array [容量]元素类型
  2. array :=[3]元素类型{元素1,元素2,元素3}
  3.  
  4. var slice []元素类型
  5. slice := make([]类型,容量) //建议这样声明
  6. slice := []元素类型{元素1,元素2,元素3}
  7. // array或者slice声明后,各元素并不为空,而是该元素类型的 *零 *值
  8.  
  9. //array声明时还可以让编译器自动导入元素容量
  10. array := [10]int{5:199, 8:200}
  11.  
  12. //多维array/slice
  13. //由相同元素类型构成的array/slice 为元素构成的array结构
  14.  
  15. array := [3][2]int{{1,2},{3,5},{9,2}}
  16. slice := [][]int{{1,2},{3,5},{9,2}}
  17.  
  18. //元素赋值
  19. 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遍历

  • 方法一

    1. for index, value := rang a{
    2. fmt.Println(index, value)
    3. }  
  • 方法二
    1. for index := range a{
    2. fmt.Println(a[index])
    3. }  
  • 方法三
    1. //len()获取array元素数量
    2. for i :=0; i<len(a); i++{
    3. fmt.Println(a[i])
    4. } 
  • 多维遍历
    1. b := [3][2]int{{1,2},{3,5},{9,2}}
    2. for index, value := range b{
    3. for i, v := range value{
    4. fmt.Println(index, i. v)
    5. }
    6. }  
  • 切片操作
    1. a := [5]int{10, 20, 30, 40, 50}
    2.  
    3. //取出前三个元素, 坐标分别是 0, 1, 2
    4. b := a[0:3]
    5. bb := a[:3]
    6.  
    7. //取出第三个元素之后所有元素(包含第3个元素)
    8. c := a[2:]
    9.  
    10. //取出第2, 3, 4 三个元素
    11. d := a[1:4]  
slice引⽤用传递的坑 分两种情况: 主slice⾃自动扩容之前 ⾃自动扩容之后

  1. s1 := []int{1, 2}
  2. s2 := s1
  3. fmt.Println(s1[0])
  4. fmt.Println(s2[0])
  5. s1[0] = 100
  6. fmt.Println(s1[0])
  7. fmt.Println(s2[0])
  8.  
  9. temp := []int{5, 6, 7, 8, 9, 10, 11, 12, 13, 14}
  10. s1 = append(s1, temp...)
  11. s1[0] = 1000
  12. fmt.Println(s1[0])
  13. fmt.Println(s2[0])

  

golang的array/slice的更多相关文章

  1. golang array, slice, string笔记

    本来想写一篇关于golang io的笔记,但是在学习io之前必须了解array, slice, string概念,因此将在下篇写golang io.   array: 数组的长度是该数组类型的一部分, ...

  2. golang之array

    golang使用array表示固定大小的数组,使用slice表示动态数组. package main import "fmt" func main() { var a = [5]i ...

  3. golang笔记——array

    1.定义一个 array 数组长度也是类型的一部分,比如长度为3的int数组与长度为5的int数组,并不是同一类型. package main import ( "strconv" ...

  4. JS之Array.slice()方法

    1.Array.slice(startIndex,endIndex); 返回由原始数组从startIndex到endIndex-1的元素构成的新数组; startIndex:默认值0,如果startI ...

  5. 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); ...

  6. [js] Array.slice和类数组转数组

    a.call(b) 相当于把a方法放到b的原型上(实例私有方法)执行 Array.slice的用途 https://juejin.im/post/5b20b8596fb9a01e8d6a47c0 用法 ...

  7. Array.slice(start,end)的用法

    start在start>=0,假设start=0,表示从数组的第一个元素开始截取,start=2,表示从数组的第二个元素开始截取,依次类推. 在start<0时,start=-1表示从倒数 ...

  8. JS - Array.slice 与 Array.splice

    1)Array.slice方法   1.1)接收两个参数:              a:起始下标              b:结束下标   1.2)返回由a(包括)至b(不包括)的元素所组成的数组 ...

  9. golang中Array与Slice

    在golang中有数组和Slice两种数据结构,Slice是基于数组的实现,是长度动态不固定的数据结构,本质上是一个对数组字序列的引用,提供了对数组的轻量级访问.那么在go的函数中以数组或Slice为 ...

随机推荐

  1. BZOJ2330 SCOI2011 糖果 【差分约束】

    BZOJ2330 SCOI2011 糖果 Description 幼儿园里有N个小朋友,lxhgww老师现在想要给这些小朋友们分配糖果,要求每个小朋友都要分到糖果.但是小朋友们也有嫉妒心,总是会提出一 ...

  2. qt creator在Qt5中中文显示的问题

    当我们用Qt Creater时,经常出会出现如下问题: 处理方法如下:用记事本打开你的源代码,然后点另存为,utf-8,编码覆盖,这时中文就没问题了但是会乱码.在字符串前加个宏QStringLiter ...

  3. 1153 Decode Registration Card of PAT (25 分)

    A registration card number of PAT consists of 4 parts: the 1st letter represents the test level, nam ...

  4. 【angularJS】Service服务

    AngularJS 中的服务是一个函数或对象.可以创建自己的服务,或使用内建服务. 内置服务 AngularJS 内建了30 多个服务. 1.  $location 服务,它可以返回当前页面的 URL ...

  5. oracle11g安装(win10)

    oracle11g安装(win10) 0.安装环境 1.安装包下载 1)http://www.oracle.com/technetwork/database/enterprise-edition/do ...

  6. Nexus搭建私服

    什么是Nexus Nexus是一个强大的Maven仓库管理器,它极大地简化了本地内部仓库的维护和外部仓库的访问. 运行原理 本地仓库与私服处在同一个局域网中,当本地仓库没有资源时,会向私服发起请求获取 ...

  7. k-means算法Java一维实现

    这里的程序稍微有点变形.k_means方法返回K-means聚类的若干中心点.代码: import java.util.ArrayList; import java.util.Collections; ...

  8. RK3288 增加双屏异显 eDP+LVDS

    CPU:RK3288 系统:Android 5.1 下面是官方文档中的信息. 1.rk3288 支持的显示接口可以任意组合. 2.双屏异显时,一个显示接口当主屏,另一个当副屏:主副屏由板级 dts 文 ...

  9. sql语句查询重复数据

    select id, name, memofrom Awhere id in (select id from A group by id having count(1) >= 2)

  10. String与StringBuffer效率的比较

    String str = “”; for (int i=0; i<100; i++) str += “a”; 可是你知道在内存中会产生多少的垃圾出来吗?总共会有a.aa.aaa. aaa….,无 ...