• 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]  
    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])
    

      

  • 相关阅读:
    课件的引子
    用nc做网络压力测试
    分布式计算学习笔记
    静态库 .a 转成共享库 .so
    nmon用法
    eclipse debug URLClassPath.getLoader(int) file
    sodu 命令场景分析
    俩孩随笔
    深度学习丨深度学习中GPU和显存分析
    语义分割丨DeepLab系列总结「v1、v2、v3、v3+」
  • 原文地址:https://www.cnblogs.com/flash55/p/10054273.html
Copyright © 2020-2023  润新知