zoukankan      html  css  js  c++  java
  • 数组和切片

    数组

    数组是指同一类型元素的集合。

    1.数组的定义及赋初值

    package main
    import "fmt" func main() { var a [3]int # 定义了一个长度为三的int类型数组 fmt.Println(a) # 运行结果:[0,0,0] ----------------------------------------------------------------- # 定义并赋值初值 var a [6]int = [6]int{1, 2, 3, 4, 5, 6} # >>>:[1, 2, 3, 4, 5, 6] var a = [6]int{1, 2, 3} # >>>:[1, 2, 3, 0, 0, 0] a := [6]int{1, 2, 3} # >>>:[1, 2, 3, 0, 0, 0] a := [...]int{1,2,3} # 忽略数组的长度,用...来代替,编辑器会自动生成长度。 a[5] = 100 fmt.Println(a) ----------------------------------------------------------------- # 将第7个位置设置为666 a := [10]int{1, 2, 5: 666, 6: 777} # [1 2 0 0 0 666 777 0 0 0] a[-7] = 13 # 不支持负索引 }

     2.数组的长度

    package main
    import "fmt" func main() { a:=[4]int{1,2,3} fmt.Println(len(a)) # >>>:4 内置函数len() } &&与 ; ||或 ; !非

    3.使用range迭代数组

      通过for循环的range方法来遍历数组。range返回索引和该索引处的值。语法为:for i, v := range a 。如果只需要值并希望忽略掉索引,则可通过 _ 空白表示怀疑替换索引。

    package main
    
    import "fmt"
    
    func main() {
        var a [4]int=[4]int{1,2}
        for i :=0; i<len(a); i++{
            fmt.Println(a[i])
        }
    }
    ------------------------------------------
    
    func main() {
        var vv [5]int = [5]int{1, 2: 666, 3: 777}
        for _, v :=range vv {        # 只取值,不取索引
    fmt.Println(_, v) } }

    4.多维数组

    package main
    import "fmt" func main() { var a [5][2]int # 把一个数组分为五份,再对这五份进行细分,每份里面再分为两份。 a[0][1] = 100 # 从五份中选取索引0,再充索引0对应的那个两份中,选取索引1。 fmt.Println(a) # >>>: [[0 100] [0 0] [0 0] [0 0] [0 0]] }

    切片

    切片本身不存储数据,只是对底层数组的引用

    1.切片的定义方式

    package main
    
    import "fmt"
    
    #由数组切出来
    func main() {
      var a [8]int = [8]int{1,2,3,4,5,6,7,8}
      var b []int = a[2:6]   # 打印出来的是前闭后开区间
      #[ ]内不加东西就是切片,[ ]加了东西便是数组类型
      fmt.Println(b)
      a[2] = 30
      fmt.Println(b)
      fmt.Println(a) # 底层数组的修改会影响到切片,切片的修改也会影响到切片
    }
    ---------------------------------------------------------
    #更多用法
    func main() {
      var a[8]int = [8]int{1,2,3,4,5,6,7,8}
      b := a[ :4]  # go中的切片没有步长
      fmt.Println(b)
    }
    ---------------------------------------------------------
    # 直接定义
    # 切片空值? 其实就是个地址 ,nil类型
    func main() {
        var a []int
        if a == nil {
            fmt.Println("我是空值")
        }
        fmt.Println(a)      
    }

    2.定义并初始化

    # 参数类型,第一个数字是切片的长度,第二个是底层数组的长度,也就是切片长度。
    package main
    
    import "fmt"
       
    func main() {
      var a []int = make([]int,3,4
      fmt.Println(a)
    }

    3.切片的长度和容量

    package main
    
    import "fmt"
       
    func main() {
        var a [8]int = [8]int {1,2,3,4,5,6,7,8} 
        var b []int = a[2:6] fmt.Println(len(b))   # 切片的长度 >>>:4         
        fmt.Println(cap(b))   # 切片的容量 ,来确定能放多少值 >>>:6
    }

     4.追加切片元素

    package main
    
    import "fmt"
    
    func main() {
        var a [8]int = [8]int {1,2,3,4,5,6,7,8}
        var b []int = a[2:6]
        fmt.Println(b)
        fmt.Println(a)
        fmt.Println(len(b))   # 查数组的长度
        fmt.Println(cap(b))  # 查数组的容量 
    --------------------------------------------------------
        #切片一直追加值,当追加到数组长度时,就不依附于底层数组,重新生成了一个数组,数组大小为切片容量的两倍。
        #内置函数append
        b=append(b,555)
        b=append(b,66)
        b=append(b,77)
        
        fmt.Println(len(b))   # 数组想扩容,要重新再申请一个数组
        fmt.Println(cap(b))   # 容量一旦超出,再重新申请一个跟原来一样的,容量翻倍
        fmt.Println(a)
        fmt.Println(b)
        b[0]=999
        fmt.Println(a)
    }

     5.切片的修改

    package main
    
    import "fmt"
    
    func main() {
        var a [8]int = [8]int {1,2,3,4,5,6,7,8}
        var b  = make([]int,3,4)
        b[0]=99     # 将b数组中索引0对应的值改为99
        fmt.Println(b)
    }

    6.切片删除元素

    package main
    
    import "fmt"
    
    func main() {
            var a = []int{1,2,3,4,5,6}
        fmt.Println(a)      # >>>:[1 2 3 4 5 6]
        a = append(a[0:2],a[3:]...)  #只取[0:2]和[3:]之间的索引,...表示打散
        fmt.Println(a)    # >>>:[1 2 4 5 6]
    }

    7.多维切片初始化方法

    package main
    
    import "fmt"
    
    func main() {
        var a []int=[]int{1,2,3}   # 切片初始化方法
        fmt.Println(a)
    
        var a [][]string=[][]string{{"1","20"},{"3","40"}} #多维切片初始化方法 
        fmt.Println(a)   # >>>: [[1 20] [3 40]]
        fmt.Println(len(a))  # 查看长度
        fmt.Println(cap(a))  # 查看容量
        a[0][1] = "222" 
            a[1][1] = "444" 
        fmt.Println(a)     # >>>: [[1 222] [3 444]]
    }

     8. copy函数

    package main
    
    import "fmt"
    
    func main() {
        var a=make([]int,3,10)
        a[1] = 66
        a[2] = 77
        fmt.Println(a)  
        
        var b=make([]int,4,4)
        fmt.Println(b)     # copy(目标切片, 原切片)
        copy(b,a)     # 把 a的值 copy到 b 切片上去
        fmt.Println(b)
    }
  • 相关阅读:
    xml模块
    json&pickle&shelve
    C#基础-关于用json给控制台程序传值的坑
    【MediaElement】WPF视频播放器【3】
    【Treeview】遍历本地磁盘
    【WCF】WCF中的InstanceContext与ConcurrencyMode【转】
    C#基础-FileStream实现多线程断点续传
    C#基础-FileStream
    C#基础-out与ref字段
    【Visual Installer】如何提醒用户卸载旧版本软件
  • 原文地址:https://www.cnblogs.com/blue-tea/p/12030070.html
Copyright © 2011-2022 走看看