zoukankan      html  css  js  c++  java
  • GoLang学习之Golang数组

    Go语言数组

    数组是Go语言编程中最常用的数据结构之一。顾名思义,数组就是指一系列同一类型数据的集合。数组中包含的每个数据被称为数组元素( element),一个数组包含的元素个数被称为数组的长度。需要强调的一点是Go语言中数组的长度固定,无法扩容。

    声明定义

    数组在定义初始化的时候,长度可以指定,也可以不指定让编译器自动推断。几种常见的数组定义初始化的方式如下:

    var a [3]int   //3个int型的数组,初始值是3个0,数组“零值”状态
    arr:=[5]int{1,2,3,4,5}   //定义并初始化长度为5的数组
    var array2 = [...]int{6, 7, 8} //不声明长度
    q := [...] int {1,2,3} //不声明长度
    r := [...] int {99:-1}  //长度为100的数组,只有最后一个是-1,其他都是0
    

    在声明var arr1 [5]int中每个元素是一个整形值,当声明数组时所有的元素都会被自动初始化为默认值 0。

    数组元素访问

    Go语言中,可以使用数组下标来访问数组中的元素。数组下标从0开始,len(arr)-1则表示最后一个元素的下标。

    只有有效的索引可以被使用,当使用等于或者大于 len(arr)的索引时:如果编译器可以检测到,会给出索引超限的提示信息;如果检测不到的话编译会通过而运行时会 panic。

    比起C语言,Go语言可以直接调用打印函数打印出整个数组。下面我们定义一个二维数组,然后来打印出数组长度和整个数组:

    package main
    
    import "fmt"
    
    func main() {
        myArray := [3][4]int{{1,2,3,4},{1,2,3,4},{1,2,3,4}}
    
        //打印一维数组长度
        fmt.Println(len(myArray))
        //打印二维数组长度
        fmt.Println(len(myArray[1]))
        //打印整个二维数组
        fmt.Println(myArray)
    }
    

    for-range结构

    这是Go语言一种独有的结构,可以用来遍历访问数组的元素。

    for ix, value := range array01 {
        ...
    }
    

    第一个返回值 ix 是数组的索引,第二个是在该索引位置的值;他们都是仅在 for 循环内部可见的局部变量。value 只是 array01 某个索引位置的值的一个拷贝,不能用来修改 array01 该索引位置的值。例如:

    package main
    import "fmt"
    
    func main() {
        var arr1 [5]int
    
        for i:=0; i < len(arr1); i++ {
            arr1[i] = i * 2
        }
    
        for i:=0; i < len(arr1); i++ {
            fmt.Printf("Array at index %d is %d
    ", i, arr1[i])
        }
    

    当然,如果你在遍历数组元素的时候,如果想遗弃索引id,可以直接把索引id标为下划线_。一个求数组里面的平均值的例子如下:

    package main
    import (
        "fmt"
    )
    func main() {
        sum := 0.0
        var avg float64
        xs := [6]float64{1, 2, 3, 4, 5, 6}
        switch len(xs) {
        case 0:
            avg = 0
        default:
            for _, v := range xs {//下划线表示那个值舍去,即舍去下标索引
                sum += v
            }
            avg = sum / float64(len(xs))
        }
        fmt.Println(avg)
    }
    
  • 相关阅读:
    luogu P1833 樱花 看成混合背包
    luogu P1077 摆花 基础记数dp
    luogu P1095 守望者的逃离 经典dp
    Even Subset Sum Problem CodeForces
    Maximum White Subtree CodeForces
    Sleeping Schedule CodeForces
    Bombs CodeForces
    病毒侵袭持续中 HDU
    病毒侵袭 HDU
    Educational Codeforces Round 35 (Rated for Div. 2)
  • 原文地址:https://www.cnblogs.com/senlinyang/p/8885962.html
Copyright © 2011-2022 走看看