Go语言学习之数组的用法详解

yizhihongxing

Go语言学习之数组的用法详解

什么是数组

数组是一种由相同类型元素组成的集合类型。数组在Go语言中是值类型,在使用数组时,操作的是数组的副本而不是本身。

数组的声明和初始化

在Go语言中,数组的声明和初始化可以有多中方式。

声明并初始化

var arr1 [5]int                  // 声明一个长度为5的int类型的数组
var arr2 = [5]int{1, 2, 3, 4, 5} // 声明并初始化一个长度为5的int类型的数组

使用...进行长度推断

arr3 := [...]int{1, 2, 3, 4, 5}   // 声明并初始化一个长度为5的int类型的数组

使用索引进行初始化

arr4 := [5]int{3: 1, 4: 2}        // 声明并初始化一个长度为5的int类型的数组,使用索引进行初始化

多维数组的声明和初始化

var arr5 [5][5]int               // 声明一个5x5的int类型的二维数组
var arr6 = [2][2]int{{1, 2}, {3, 4}} // 声明并初始化一个2x2的int类型的二维数组

数组的访问和遍历

数组的元素可以通过索引进行访问。可以使用for循环语句对数组进行遍历。

var arr = [5]int{1, 2, 3, 4, 5}

for i := 0; i < len(arr); i++ {
    fmt.Printf("arr[%d] = %d\n", i, arr[i])
}

for i, v := range arr {
    fmt.Printf("arr[%d] = %d\n", i, v)
}

可以看到,在遍历数组时,使用了语法糖rangei表示数组的下标,v表示数组的元素值。

数组作为函数参数

由于数组是值类型,所以在函数调用时会拷贝整个数组。因此使用指针可以避免这种拷贝,提高性能。

func sum(arr [5]int) int {
    sum := 0

    for _, v := range arr {
        sum += v
    }

    return sum
}

func sumByPointer(arr *[5]int) int {
    sum := 0

    for _, v := range arr {
        sum += v
    }

    return sum
}

func main() {
    arr1 := [5]int{1, 2, 3, 4, 5}
    arr2 := &arr1

    fmt.Println(sum(arr1))
    fmt.Println(sumByPointer(arr2))
}

可以看到,在函数sum中传递了数组的副本,而函数sumByPointer传递了指向数组的指针。

示例

示例1:找出数组中的最大值

对于一个长度为n的数组,可以定义一个变量max,初始值为数组的第一个元素,然后遍历整个数组,如果数组的元素比max大,就将max赋值为这个元素,最终max即为数组中的最大值。

func findMax(arr [5]int) int {
    max := arr[0]

    for _, v := range arr {
        if v > max {
            max = v
        }
    }

    return max
}

func main() {
    arr := [5]int{1, 3, 5, 2, 4}

    fmt.Println(findMax(arr))
}

输出:

5

示例2:矩阵转置

给定一个二维数组,将它转置。

func transpose(matrix [3][3]int) [3][3]int {
    var res [3][3]int

    for i := 0; i < 3; i++ {
        for j := 0; j < 3; j++ {
            res[i][j] = matrix[j][i]
        }
    }

    return res
}

func main() {
    matrix := [3][3]int{{1, 2, 3}, {4, 5, 6}, {7, 8, 9}}

    fmt.Println("origin matrix:")
    for _, row := range matrix {
        fmt.Println(row)
    }

    res := transpose(matrix)

    fmt.Println("transpose matrix:")
    for _, row := range res {
        fmt.Println(row)
    }
}

输出:

origin matrix:
[1 2 3]
[4 5 6]
[7 8 9]
transpose matrix:
[1 4 7]
[2 5 8]
[3 6 9]

以上就是Go语言学习之数组的用法详解,希望能对你的学习有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Go语言学习之数组的用法详解 - Python技术站

(0)
上一篇 2023年6月25日
下一篇 2023年6月25日

相关文章

  • asp 关键词高亮显示(不区分大小写)

    当在ASP中需要对关键词进行高亮显示时,可以使用以下步骤来实现(不区分大小写): 首先,获取要显示的文本内容和关键词。假设我们有一个字符串变量text,其中包含要显示的文本内容,以及一个字符串变量keyword,其中包含要高亮显示的关键词。 使用正则表达式来匹配并替换关键词。在ASP中,可以使用RegExp对象来进行正则表达式操作。创建一个RegExp对象,…

    other 2023年8月18日
    00
  • vant快速上手

    Vant是一款基于Vue.js的移动端UI组件库,提供了丰富的组件和样式,可以快速构建高质量的移动端应用。以下是关于Vant快速上手的详细攻略: Vant快速上手 以下是使用Vant快速上手的步骤: 安装Vant 可以使用npm或yarn安装Vant: npm install vant -S 或 yarn add vant 引入Vant 在Vue.js项目中…

    other 2023年5月9日
    00
  • 在C语言编程中使用变量的基础教程

    在C语言编程中使用变量的基础教程 介绍 在C语言中,变量是用来存储数据的一种方式。它们可以用来保存各种类型的数据,如整数、浮点数、字符等。在本教程中,我们将学习如何声明变量、给变量赋值以及如何使用它们。 声明变量 在使用变量之前,我们需要先声明它们。变量的声明告诉编译器变量的名称和类型。C语言中的变量声明遵循以下语法: type variable_name;…

    other 2023年8月9日
    00
  • 苹果电脑的Mac系统安装应用程序(软件)的方法(图文教程)

    苹果电脑的Mac系统安装应用程序(软件)的方法(图文教程) 1. 从App Store下载安装 步骤如下: 打开App Store 在搜索框中输入软件名称或关键字 找到相应的软件,然后点击“获取”或“安装”按钮 输入Apple ID和密码进行确认 下载完成后,在“启动台”中找到并打开软件 示例说明1:下载并安装“Pages” 打开App Store 在搜索框…

    other 2023年6月25日
    00
  • Android Service详解及示例代码

    我将详细讲解“Android Service详解及示例代码”的完整攻略。 介绍 Android中的Service是一种可以在后台运行的组件,它们可以在没有用户界面的情况下执行长时间的操作,甚至可以在应用被关闭的情况下继续运行。Service是运行在主线程之外的,因此它们不会影响应用的性能。 Service的创建 Service可以用两种方式来创建: 继承Se…

    other 2023年6月27日
    00
  • C语言实现Fibonacci数列递归

    下面是实现C语言Fibonacci数列递归的攻略,包含以下几个步骤: 步骤一:理解Fibonacci数列 Fibonacci数列指的是:1, 1, 2, 3, 5, 8, 13, 21, 34, 55……每个数等于前两个数之和。例如,第三个数为1+1=2,第四个数为1+2=3。 步骤二:理解递归 递归是一种同时使用函数或子过程等基本单位和重复语句,以便将问题…

    other 2023年6月27日
    00
  • 小程序开发工具全新上线

    小程序开发工具全新上线攻略 最近,小程序开发工具全新上线了,让开发者们更加便捷地进行小程序的开发。本篇攻略将详细介绍新版小程序开发工具的主要功能及使用方法,帮助各位开发者更快更好地上手。 下载安装小程序开发工具 首先,在前往小程序官网的开发者中心注册账号并创建小程序后,我们需要下载并安装小程序开发工具。具体操作如下: 打开小程序开发者工具官网,点击“立即下载…

    other 2023年6月26日
    00
  • 小米手机4的内存速度怎么样?eMMC 5.0速度快不快?

    小米手机4采用了eMMC 5.0存储技术,它的内存速度相对较快。eMMC 5.0是一种闪存存储解决方案,它采用了高速的MMC(多媒体卡)接口,提供了更快的数据传输速度和更好的性能。 eMMC 5.0的速度主要受到两个因素的影响:读取速度和写入速度。下面是两个示例说明: 读取速度:小米手机4的eMMC 5.0存储器具有较快的读取速度,这对于快速加载应用程序和文…

    other 2023年8月1日
    00
合作推广
合作推广
分享本页
返回顶部