• Go语言 slice切片的使用


      切片(slice)是对数组的一个连续片段的引用,所以切片是一个引用类型(因此更类似于 C/C++ 中的数组类型,或者 Python 中的 list 类型),这个片段可以是整个数组,也可以是由起始和终止索引标识的一些项的子集,需要注意的是,终止索引标识的项不包括在切片内。

      Go语言中切片的内部结构包含地址、大小和容量,切片一般用于快速地操作一块数据集合,如果将数据集合比作切糕的话,切片就是你要的“那一块”,切的过程包含从哪里开始(切片的起始位置)及切多大(切片的大小),容量可以理解为装切片的口袋大小,如下图所示。

      从数组或切片生成新的切片

      切片默认指向一段连续内存区域,可以是数组,也可以是切片本身。

      从连续内存区域生成切片是常见的操作,格式如下:

      slice [开始位置 : 结束位置]

      语法说明如下:

      • slice:表示目标切片对象;
      • 开始位置:对应目标切片对象的索引;
      • 结束位置:对应目标切片的结束索引。

      从数组或切片生成新的切片拥有如下特性:

    • 取出的元素数量为:结束位置 - 开始位置;
    • 取出元素不包含结束位置对应的索引,切片最后一个元素使用 slice[len(slice)] 获取;
    • 当缺省开始位置时,表示从连续区域开头到结束位置;
    • 当缺省结束位置时,表示从开始位置到整个连续区域末尾;
    • 两者同时缺省时,与切片本身等效;
    • 两者同时为 0 时,等效于空切片,一般用于切片复位。

      程序实例代码

    package main
    
    import "fmt"
    
    func main() {
        fmt.Println("从数组或切片生成新的切片")
        //a 是一个拥有 3 个整型元素的数组,被初始化为数值 1 到 3
        var a = [3]int{1, 2, 3}
        //使用 a[1:2] 可以生成一个新的切片   [2] 就是 a[1:2] 切片操作的结果
        fmt.Println(a, a[1:2])
        fmt.Println("表示原有的切片")
        //生成切片的格式中,当开始和结束位置都被忽略时,生成的切片将表示和原切片一致的切片
        fmt.Println(a[:])
        fmt.Println("重置切片,清空拥有的元素")
        fmt.Println(a[0:0])
    
        fmt.Println("直接声明新的切片")
        //声明字符串切片
        var strList []string
        //声明整型切片
        var numList []int
        //声明空整型切片
        var numListEmpty = []int{}
        //输出3个切片
        fmt.Println(strList, numList, numListEmpty)
        //输出3个切片大小
        fmt.Println(len(strList), len(numList), len(numListEmpty))
    
        fmt.Println("使用 make() 函数构造切片")
        c := make([]int, 2)
        d := make([]int, 2, 10)
        fmt.Println(c, d)
    
        fmt.Println(len(c), len(d))
    
    }

      输出结果

  • 相关阅读:
    34. Find First and Last Position of Element in Sorted Array
    42. Trapping Rain Water
    HDU-2952 Counting Sheep (DFS)
    HDU-1518 Square(DFS)
    HDU-1253 胜利大逃亡 (BFS)
    HDU-1026 Ignatius and the Princess I (BFS)
    最小生成树之Prim算法,Kruskal算法
    HDU-1495 非常可乐(BFS)
    strncpy 用法
    字符串函数总结
  • 原文地址:https://www.cnblogs.com/personblog/p/12249148.html
Copyright © 2020-2023  润新知