zoukankan      html  css  js  c++  java
  • 【go语言学习】数组array

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

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

    数组元素可以通过索引(位置)来读取(或者修改),索引从0开始,第一个元素索引为 0,第二个索引为 1,以此类推。数组的下标取值范围是从0开始,到长度减1。

    数组一旦定义后,大小不能更改。

    一、数组定义

    需要指明数组的大小和存储的数据类型。
    var 数组变量名 [元素数量]T

    var arr[5]int //定义一个int类型长度为5的数组
    

    二、数组初始化

    数组的初始化有三种方法。

    1、使用指定的值完成初始化
    var numArry = [3]int{1, 2, 3}
    var cityArry = [3]string{"北京", "上海", "深圳"}
    
    2、根据初始值的个数自行推断数组的长度
    var numArry = [...]int{1, 2, 3}
    var cityArry = [...]string{"北京", "上海", "深圳"}
    
    3、使用指定索引值的方式来初始化数组
    numArry := [...]int{0: 1, 2: 3} //[1 0 3]
    var cityArry = [...]string{0: "北京", 1: "深圳"} //["北京" "" "深圳"]
    

    三、数组的遍历

    数组的长度len(arr)可以得到数组的长度
    数组的遍历可以用for循环或for range循环

    arr := [...]int{1, 2, 3}
    for i := 0; i < len(arr); i++ {
        fmt.Println(i, arr[i])
    }
    
    arr := [...]int{1, 2, 3}
    for k, v := range arr {
        fmt.Println(k, v)
    }
    

    运行结果

    0 1
    1 2
    2 3
    

    四、多维数组

    Go语言是支持多维数组的,我们这里以二维数组为例(数组中又嵌套数组)。

    arr1 := [2][3]int{
        {1, 2, 3},
        {4, 5, 6},
    }
    arr2 := [2][2]string{{"北京", "上海"}, {"苏州", "无锡"}}
    fmt.Println(arr1)//[[1 2 3] [4 5 6]]
    fmt.Println(arr2)//[[北京 上海] [苏州 无锡]]
    

    注意: 多维数组只有第一层可以使用...来让编译器推导数组长度。

    多维数组的遍历:
    for遍历

    package main
    
    import "fmt"
    
    func main() {
    	cityArry := [2][2]string{{"北京", "上海"}, {"苏州", "无锡"}}
    	for i := 0; i < len(cityArry); i++ {
    		for j := 0; j < len(cityArry[i]); j++ {
    			fmt.Printf("第%v行, 第%v列的值为%v
    ", i+1, j+1, cityArry[i][j])
    		}
    	}
    }
    

    运行结果

    第1行, 第1列的值为北京
    第1行, 第2列的值为上海
    第2行, 第1列的值为苏州
    第2行, 第2列的值为无锡
    

    for range遍历

    package main
    
    import "fmt"
    
    func main() {
    	numArry := [2][3]int{{1, 2, 3}, {4, 5, 6}}
    	for k1, v1 := range numArry {
    		for k2, v2 := range v1 {
    			fmt.Printf("第%v行,第%v列的值为%v
    ", k1+1, k2+1, v2)
    		}
    	}
    }
    

    运行结果

    第1行,第1列的值为1
    第1行,第2列的值为2
    第1行,第3列的值为3
    第2行,第1列的值为4
    第2行,第2列的值为5
    第2行,第3列的值为6
    

    五、数组是值类型

    Go语言中的数组是值类型,而不是引用类型。赋值和传参会复制整个数组。因此改变副本的值,不会改变数组本身的值。

    a := [...]int{1, 2, 3}
    b := a
    b[0] = 100
    fmt.Println(a)//[1 2 3]
    fmt.Println(b)//[100 2 3]
    

    数组的大小是类型的一部分。因此[5]int和[10]int是不同的类型。

    package main
    
    func main() {  
        a := [5]int{1, 2, 3, 4, 5}
        var b [10]int
        b = a //cannot use a (type [5]int) as type [10]int in assignment
    }
    

    六、数组排序

    go分别提供了sort.Float64s() sort.Strings() sort.Ints() 对不同类型的数组进行排序,默认是升序。降序需要使用sort.Reverse

    package main
    
    import (
    	"fmt"
    	"sort"
    )
    
    func main() {
    	intArry := [...]int{12, 2, 23, 44, 22, 10}
    	floatArry := [...]float64{12.1, 2.4, 23.4, 45.1, 22.5, 10.7}
    	stringArry := [...]string{"abc", "ab", "bc"}
    	// 升序排列
    	sort.Ints(intArry[:])
    	sort.Float64s(floatArry[:])
    	sort.Strings(stringArry[:])
    	fmt.Println(intArry)
    	fmt.Println(floatArry)
    	fmt.Println(stringArry)
    	// 降序排列
    	sort.Sort(sort.Reverse(sort.IntSlice(intArry[:])))
    	sort.Sort(sort.Reverse(sort.Float64Slice(floatArry[:])))
    	sort.Sort(sort.Reverse(sort.StringSlice(stringArry[:])))
    	fmt.Println(intArry)
    	fmt.Println(floatArry)
    	fmt.Println(stringArry)
    }
    

    运行结果

    [2 10 12 22 23 44]
    [2.4 10.7 12.1 22.5 23.4 45.1]
    [ab abc bc]
    [44 23 22 12 10 2]
    [45.1 23.4 22.5 12.1 10.7 2.4]
    [bc abc ab]
    
  • 相关阅读:
    机器学习笔记--KNN算法2-实战部分
    机器学习笔记--KNN算法1
    机器学习---python环境搭建
    机器学习简介
    用心去记录未来三年学习生活。
    jmeter5.1.1 生成html报告
    mysql字符串拼接
    linux 下mysql 慢查 my.ini/my.cnf 文件路径
    JMeter 分布式压测
    Jmeter压测报错 java.net.BindException: Address already in use: connect
  • 原文地址:https://www.cnblogs.com/everydawn/p/13880543.html
Copyright © 2011-2022 走看看