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

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日

相关文章

  • JavaScript处理变量命名的参数对象

    JavaScript处理变量命名的参数对象攻略 在JavaScript中,我们经常需要处理具有多个参数的函数。有时,我们希望将这些参数封装到一个对象中,以便更好地组织和管理它们。这种对象被称为\”命名的参数对象\”。本攻略将详细介绍如何处理这种类型的参数对象。 创建命名的参数对象 要创建一个命名的参数对象,我们可以使用对象字面量的方式,将参数名作为对象的属性…

    other 2023年8月8日
    00
  • Android用注解与反射实现Butterknife功能

    Android用注解与反射实现Butterknife功能攻略 Butterknife是一个Android开发中常用的注解库,它可以简化视图绑定和事件绑定的过程。本攻略将详细介绍如何使用注解与反射实现Butterknife的功能。 步骤一:添加依赖 首先,在项目的build.gradle文件中添加Butterknife的依赖: dependencies { i…

    other 2023年9月7日
    00
  • css-css选择器:id或类中的第一个div

    CSS选择器:id或类中的第一个div 在CSS中,我们可以使用选择器来选择HTML元素,并对其应用样式。有时候,我们需要选择id或中的第一个div元素,以对其应用特定的样式。本文将详细讲解如何CSS选择器选择id或类中的第一个div元素。 实步骤 以下是使用CSS选择器选择id或类中的第一个div元素的步骤: 使用:first-child伪类选择第一个di…

    other 2023年5月9日
    00
  • vue前端使用md5加密解密

    Vue前端使用MD5加密解密攻略 在Vue前端应用程序中,MD5加密是一种常用的加密方式。MD5是一种不可逆加密法,可以将任意长度的数据转换为固定长度的哈希值。以下是在Vue前应用程序中使用MD5加的详细攻。 安装MD5库 在Vue前端应用程序中使用MD5加密,需要先安装MD5库。您可以使用以下命令在应用程序中安装MD5库: npm install –sa…

    other 2023年5月6日
    00
  • 魔兽世界怀旧服暗影之翼要不要优先法系 暗影之翼分配优先级分析

    魔兽世界怀旧服暗影之翼是一款非常受欢迎的游戏,很多玩家都关注关于怀旧服暗影之翼要不要优先法系这个话题。在这里,我们将详细讲解这个话题的完整攻略,包括分析和实例说明,以帮助玩家更好地理解。 魔兽世界怀旧服暗影之翼要不要优先法系 对于这个问题,我们需要深入分析,在暗影之翼中,法系的确非常重要,它可以对敌人进行有效的打击和控制,但是并不意味着其他职业就可以无视。 …

    other 2023年6月27日
    00
  • 详解将Web项目War包部署到Tomcat服务器基本步骤

    以下是一个详细的攻略,介绍了将Web项目War包部署到Tomcat服务器的基本步骤,包括两个示例说明。 … 示例1:将War包部署到Tomcat的webapps目录 将War包复制到Tomcat的webapps目录下。假设War包的名称为myapp.war。 打开终端或命令提示符,进入Tomcat的bin目录。 启动Tomcat服务器。在终端或命令提示符…

    other 2023年8月15日
    00
  • linux下安装wireshark

    简介 Wireshark是一款开源的网络协议分析工具,可以用于捕获和分析网络数据包。在本攻略中,我们将介绍如何在Linux下安装Wireshark,并提供两个示例说明。 步骤 以下是在Linux下安装Wireshark的步骤。 步骤1:更新软件包列表 在安装Wireshark之前,我们需要更新软件列表。我们按照以下步骤更新软件包列表: 打开终端。 我们可以打…

    other 2023年5月6日
    00
  • python实现忽略大小写对字符串列表排序的方法

    Python实现忽略大小写对字符串列表排序的方法 在Python中,要实现忽略大小写对字符串列表进行排序,可以使用sorted()函数结合自定义的排序函数来实现。下面是完整的攻略: 步骤1:定义自定义的排序函数 首先,我们需要定义一个自定义的排序函数,该函数将用于比较字符串的大小。在这个函数中,我们将使用字符串的小写形式进行比较,以实现忽略大小写的效果。下面…

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