zoukankan      html  css  js  c++  java
  • golang之切片

    可以理解为动态数组

    不指定数组长度

    创建

    // 使用 make 创建空的整型切片
    myNum := make([]int, 0)
    // 使用切片字面量创建空的整型切片
    myNum := []int{}
    slice := array[0,3,5]
    //[low,high,max]
    //low:起点
    //high:终点   左闭右开
        //len = high - low  长度
        //cap: max - low 容量
    a := []int{1,2,3,4,5}
    s := a[1:3:5]
    结果:
        s = 1,2. 容量是5
    // 创建一个整型切片
    // 其长度和容量都是 5 个元素
    slice := make([]int, 5)
    // 创建一个整型切片
    // 使其长度大于容量
    myNum := make([]int, 5, 3)

    注意,Golang 不允许创建容量小于长度的切片,当创建的切片容量小于长度时会在编译时刻报错:

    panic: runtime error: index out of range

    切片扩容

    // 创建一个长度和容量都是 4 的整型切片
    myNum := []int{10, 20, 30, 40}
    // 向切片追加一个新元素
    // 将新元素赋值为 50
    newNum := append(myNum, 50)

    当这个 append 操作完成后,newSlice 拥有一个全新的底层数组,这个数组的容量是原来的两倍:

    函数 append() 会智能地处理底层数组的容量增长。在切片的容量小于 1000 个元素时,总是会成倍地增加容量。一旦元素个数超过 1000,容量的增长因子会设为 1.25,也就是会每次增加 25%的容量(随着语言的演化,这种增长算法可能会有所改变)。

    遍历切片

    myNum := []int{10, 20, 30, 40, 50}
    // 迭代每一个元素,并显示其值
    for index, value := range myNum {
        fmt.Printf("index: %d value: %d
    ", index, value)
    }

    range 创建了每个元素的副本,而不是直接返回对该元素的引用。要想获取每个元素的地址,可以使用切片变量和索引值:

    还可以用for遍历

    切片拷贝

    func copy(dst, src []Type) int
    //它表示把切片 src 中的元素拷贝到切片 dst 中,返回值为拷贝成功的元素个数。如果 src 比 dst 长,就截断;如果 src 比 dst 短,则只拷贝 src 那部分:
    num1 := []int{10, 20, 30}
    num2 := make([]int, 5)
    count := copy(num2, num1)
    fmt.Println(count)
    fmt.Println(num2)
    
    
    //结果:
        3   //表示拷贝成功的元素个数
    [10 20 30 0 0]

    切片排序

    sort.Ints(a[:])

    正在整理笔记,如有雷同,请告知,必添加~

  • 相关阅读:
    laravel MethodNotAllowedHttpException错误一个原因
    laravel查看执行sql的
    二维,多维数组排序array_multisort()函数的使用
    REMOTE_ADDR,HTTP_CLIENT_IP,HTTP_X_FORWARDED_FOR获取客户端IP
    学习正则笔记
    关于apidoc文档生成不了的一个原因
    laravel 表单验证 Exists 规则的基本使用方法
    laravel 500错误的一个解决办法
    关于laravel 用paginate()取值取不到的问题
    C语言寒假大作战02
  • 原文地址:https://www.cnblogs.com/qzhc/p/13454645.html
Copyright © 2011-2022 走看看