• Go语言数组的使用


    Go 语言数组

    Go 语言提供了数组类型的数据结构。

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

    相对于去声明number0, number1, ..., and number99的变量,使用数组形式numbers[0], numbers[1] ..., numbers[99]更加方便且易于扩展。

    数组元素可以通过索引(位置)来读取(或者修改),索引从0开始,第一个元素索引为 0,第二个索引为 1,以此类推。

    声明数组

    Go 语言数组声明需要指定元素类型及元素个数,语法格式如下

    var array_name [SIZE] array_type

    以上为一维数组的定义方式。数组长度必须是整数且大于 0。例如以下定义了数组 balance 长度为 10 类型为 float32:

    var blance [5] float32

    //如果不给初始化的值,默认就用根据数据类型填充数组的元素,float32的默认填充5个大鸭蛋([0 0 0 0 0])

    初始化数组

    以下演示了数组初始化:

    var blance = [5] float32 {1000.0, 2.0, 3.4, 7.0, 50.0}

    //给了初始化的值以后,数组中的元素为[1000 2 3.4 7 50]

    注意:

    1. 初始化数组中 {} 中的元素个数不能大于 [] 中的数字。
    2. 如果忽略 [] 中的数字不设置数组大小,Go 语言会根据元素的个数来设置数组的大小:[...]
    package main
    
    import (
        "fmt"
    )
    
    func  main()  {
        //会自动计算初始化的值得个数
        var blance = [...] float32 {1000.0, 2.0, 3.4, 7.0, 50.0}
        //len函数是内部函数,会打印初始化数组中的元素个数
        fmt.Println(len(blance))
    }

    修改数组中第一个索引的值(数组的索引从0开始计算)

    blance[1] = 101.21
    
    //数组中的第二个元素就会被重新赋值为101.21,新数组的结果为[1000 101.21 3.4 7 50]

    访问数组中的值(不能超出数组的个数,不然会报错)

    func  main()  {
        //会自动计算初始化的值得个数
        var blance = [...] float32 {1000.0, 2.0, 3.4, 7.0, 50.0}
        blance[1] = 101.21
        //len函数是内部函数,会打印初始化数组中的元素个数
        fmt.Println(len(blance))
        fmt.Println(blance[4])
        /*超过索引的最大取值了,报错了invalid array index 8 (out of bounds for 5-element array)
        fmt.Println(blance[8])
        */
    }

    以下演示了数组完整操作(声明、赋值、访问)的实例:

     1 package main
     2 
     3 import (
     4     "fmt"
     5 )
     6 
     7 func main(){
     8     //创建局部数组变量blance
     9     var blance = [...] string {"a", "b", "c", "d","e","f"}
    10     //计算数组的个数
    11     count := len(blance)
    12     //初始化数组n
    13     var n [6] int
    14     for i := 0; i < count; i++{
    15         //通过for循环,给n的索引赋值
    16         n[i] = i + 10
    17     }
    18     
    19     //访问新创建的n数组里面的值
    20     for index,v := range n{
    21         fmt.Printf("n数组中的第 %d 个索引为: %d 
    ",index,v)
    22     }
    23 }

    以上代码输出的结果为

    n数组中的第 0 个索引为: 10
    n数组中的第 1 个索引为: 11
    n数组中的第 2 个索引为: 12
    n数组中的第 3 个索引为: 13
    n数组中的第 4 个索引为: 14
    n数组中的第 5 个索引为: 15

    Go 语言多维数组

    Go 语言支持多维数组,以下为常用的多维数组声明方式:

    var array_name [SIZE1][SIZE2]...[SIZEN] array_type

    二维数组

    二维数组是最简单的多维数组,二维数组本质上是由一维数组组成的。二维数组定义方式如下:

    var arrayName [ x ][ y ] array_type

    array_type 为 Go 语言的数据类型,arrayName 为数组名,二维数组可认为是一个表格,x 为行,y 为列,下图演示了一个二维数组 a 为三行四列:

    二维数组中的元素可通过 a[ i ][ j ] 来访问。

    初始化二位数组:

     func main(){
        //初始化二维数组
        var threedim = [2][5] int {
            {1,2,3,4,5},
            {6,7,8,9,10},
        }
        fmt.Println(threedim)
    }

    获取第二维数组中第一个元素中的第四个值

    func main(){
        //初始化二维数组,索引从0开始,第一个元素索引为0,第一个元素中第三个索引上的值
        var threedim = [2][5] int {
            {1,2,3,4,5},
            {6,7,8,9,10},
        }
        fmt.Println(threedim[0][3])
    }

    利用循环输出二维数组的对应索引上的值

     1 package main
     2 
     3 import (
     4     "fmt"
     5 )
     6 
     7 func main(){
     8     //初始化二维数组
     9     var threedim = [3][5] int {
    10         {1,2,3,4,5},
    11         {6,7,8,9,10},
    12         {11,12,13,14,15},
    13     }
    14     count := len(threedim)
    15     for i := 0; i< count ; i++{
    16         inner_count := len(threedim[i])
    17         for j := 0; j < inner_count; j++{
    18             fmt.Printf("threedim [%d][%d] = %d
    ", i,j,threedim[i][j])
    19         }
    20 
    21     }
    22 }

    以上代码返回的结果为:

    threedim [0][0] = 1
    threedim [0][1] = 2
    threedim [0][2] = 3
    threedim [0][3] = 4
    threedim [0][4] = 5
    threedim [1][0] = 6
    threedim [1][1] = 7
    threedim [1][2] = 8
    threedim [1][3] = 9
    threedim [1][4] = 10
    threedim [2][0] = 11
    threedim [2][1] = 12
    threedim [2][2] = 13
    threedim [2][3] = 14
    threedim [2][4] = 15

    Go 语言向函数传递数组

     如果你想向函数传递数组参数,你需要在函数定义时,声明形参为数组

    栗子~

     1 package main
     2 
     3 import (
     4     "fmt"
     5 )
     6 
     7 func getAverage(arr [] int, size int) float32 {
     8     var sum  int
     9     var avg  float32
    10     //循环获取arr数组的元素
    11     for i := 0; i < size; i++ {
    12         //计算每个元素相加的和
    13         sum += arr[i]
    14     }
    15     //计算平均数
    16     avg = float32(sum/size)
    17     return avg
    18 }
    19 
    20 func main() {
    21     //初始化数组
    22     var blance = [] int {100,50,42,1,4}
    23     //调用计算平均数的数组
    24     fmt.Println(getAverage(blance,5))
    25 }

    以上代码执行的返回结果:

    39

    不行 不行,宝宝没办法忍了....go的语法太TMD的egg pain....,我要用Python搞一发~~,快来看Python的

     1 #!/usr/bin/env python3
     2 #_*_coding:utf-8_*_
     3 
     4 __author__ = 'demon'
     5 
     6 array = [100,50,42,1,4]
     7 
     8 def avg(array):
     9     sum = 0
    10     for i in array:
    11         sum += i
    12     avg_number = sum / len(array)
    13     return avg_number
    14 
    15 
    16 print(avg(array))

    更简单的写法~

    1 #!/usr/bin/env python3
    2 #_*_coding:utf-8_*_
    3 
    4 __author__ = 'demon'
    5 
    6 array = [100,50,42,1,4]
    7 
    8 print(sum(array)/len(array))

    以上代码执行的结果:

    39.4
  • 相关阅读:
    SaltStack
    python模块相关
    python optparse命令解析模块
    python ConfigParser模块 配置文件解析
    pssh 批量管理执行
    rsync+inotify 实现实时同步
    [译]17-spring基于java代码的配置元数据
    [译]16-spring基于注解的配置元数据
    [译]15-spring 自动装配
    [译]14-spring 集合元素的注入
  • 原文地址:https://www.cnblogs.com/demon89/p/7257226.html
Copyright © 2020-2023  润新知