zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    .net core读取appsettings.config中文乱码问题
    vs2017错误:当前页面的脚本发生错误
    VS Code中无法识别npm命令
    Visual Studio报错/plugin.vs.js,行:1074,错误:缺少标识符、字符串或数字
    记录一次在生成数据库服务器上出现The timeout period elapsed prior to completion of the operation or the server is not responding.和Exception has been thrown by the target of an invocation的解决办法
    Java集合框架
    java hash表
    Java Dictionary 类存储键值
    java数据结构 栈stack
    java封装
  • 原文地址:https://www.cnblogs.com/demon89/p/7257226.html
Copyright © 2011-2022 走看看