Go入门10:数组 array

数组,是具有相同唯一类型的一组已编号且长度固定的数据项序列(这是一种同构的数据结构);这种类型可以是任意的原始类型,例如:整型、字符串或者自定义类型。

数组长度必须是一个常量表达式,并且必须是一个非负整数。需要强调:数组长度也是数组类型的一部分,因此 [3]int[4]int 是不同的类型,数组也就不能改变长度。

Go语言数组

数组就是指一系列同一类型数据的集合。数组中包含的每个数据被称为数组元素( element),一个数组包含的元素个数被称为数组的长度。

需要强调的一点是:Go语言中数组的长度固定,无法扩容

var arr [n]type

声明定义

数组在定义初始化的时候,长度可以指定,也可以不指定而让编译器自动推断。

几种常见的数组定义初始化的方式如下:

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} //不声明长度,Go会自动根据元素个数来计算长度

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))    // 3

    //打印二维数组长度

    fmt.Println(len(myArray[1]))    // 4

    //打印整个二维数组

    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\n”, i, arr1[i])

    }

输出:

Array at index 0 is 0

Array at index 1 is 2

Array at index 2 is 4

Array at index 3 is 6

Array at index 4 is 8

当然,如果你在遍历数组元素的时候,如果想遗弃索引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)    // 3.5

}

    原文作者:laigw
    原文地址: https://www.jianshu.com/p/91b37a9ee98d
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞