相同点

  • 由相同类型的元素组合构成
  • 元素有序排列,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]  
slice引⽤用传递的坑 分两种情况: 主slice⾃自动扩容之前 ⾃自动扩容之后

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的更多相关文章

  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. 军哥LNMP优化

    http://bbs.vpser.net/thread-8914-1-1.html http://www.zxsdw.com/index.php/archives/881/ 修改/usr/local/ ...

  2. 亚马逊MWS开发套路演示

    MWS是商城网络服务的缩写,具体介绍看这里http://docs.developer.amazonservices.com/zh_CN/dev_guide/DG_IfNew.html.MWS就是一组A ...

  3. ubuntu :扩充虚拟机的磁盘容量

    前言: 开始建立虚拟机的时候给的容量是20G,给了10G的交换空间,所以后来有点不够用了,现在安装软件会出现提示磁盘空间不足,所以需要扩充一下磁盘的容量. 步骤:     1.因为我用的是Vmware ...

  4. java代码----数据类型的转换-----int --->String

    总结:int ----->String package com.a.b; //测试..char--->int // int--->String public class Yue2 { ...

  5. java代码---数据类型的强制转换----不懂啊

    总结:看写的测试代码 字符到整型必须进行强制转换 package com.a.b; //byte→int 可以 int范围大,不必转换 B.short→long //C.float→double 这个 ...

  6. SpringMVC之五:自定义DispatcherServlet配置及配置额外的 servlets 和 filters

    相关文章 <Servlet3.0之四:动态注册和Servlet容器初始化> <SpringBoot中通过SpringBootServletInitializer如何实现组件加载> ...

  7. Tool:Visual Studio

    ylbtech-Tool:Visual Studio Microsoft Visual Studio(简称VS)是美国微软公司的开发工具包系列产品.VS是一个基本完整的开发工具集,它包括了整个软件生命 ...

  8. 如何利用JConsole观察分析Java程序的运行并进行排错调优_java

    如何利用JConsole观察分析Java程序的运行并进行排错调优_java 官方指导  use jconsole use jmx technology

  9. hadoop Partiton中的字符串Hash函数改进

    最近的MapReduce端的Partition根据map生成的Key来进行哈希,导致哈希出来的Reduce端处理任务数量非常不均匀,有些Reduce端处理的数据量非常小(几分钟就执行完成,而最后的pa ...

  10. 用php命令执行php脚本报错,在浏览器里执行却正常。

    写了一个Php脚本,里面用到了PDO连接数据库,但是所有的库都已经安装,在浏览器里执行完全正常,但是写到批处理文件里用php命令去执行的时候却报错找不到驱动,很奇怪. 经查找得知原来php命令与浏览器 ...