阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

简单分析Go语言中数组的这些细节

71次阅读
没有评论

共计 2220 个字符,预计需要花费 6 分钟才能阅读完成。

导读 这篇文章主要为大家详细介绍了 Go 语言中数组一些细节的相关资料,文中的示例代码讲解详细,对我们学习 Go 语言有一定的帮助,需要的可以了解一下
Go 语言基础二
len&cap

书接上文,我们提到二维数组中的第二个维度的数组不能用 … 来表示,接下来我们要认识两个新的函数,它们分别是 len 和 cap

package main
​
func main() {a := [2]int{}
    println(len(a), cap(a)) 
}

由上方代码可知,我们在 main 函数里面定义了一个 a 数组,长度为 2,未进行初始化变量等赋值操作,所以数组元素均为 0;调用打印函数输出的是数组 a 的 length 和 cap 值,这里运行结果均为 2

二维数组的遍历

接下来我们重点讲一下二维数组的遍历,有些小伙伴可能就要问了:我没学过什么遍历循环啊,这让我怎么理解?

别急,咱们看代码主要看的是一个思路过程~

package main
import ("fmt")
func main() {var f [2][3]int = [...][3]int{{1, 2, 3}, {7, 8, 9}}
    for k1, v1 := range f {
        for k2, v2 := range v1 {fmt.Printf("(%d,%d)=%d", k1, k2, v2)
        }
        fmt.Println()}
}

首先我们可以看到在 main 函数里面定义了一个 int 类型,名叫 f 的数组,它的属性为 2 行 3 列,第一行存储的是 {1,2,3},第二行存储的是 {7,8,9},我们通过 for 循环对二维数组进行一次遍历,读者暂时可以把它理解成一个循环的固定格式,后续循环会为读者一一介绍,由于本次数组是二维数组,所以我们需要调用两次 for 循环来对数组进行遍历,通过函数打印输出所需要的值

数组的拷贝与传参
package main
import "fmt"
func printArr(arr *[5]int) {arr[0] = 10
    for i, v := range arr {fmt.Println(i, v)
    }
}
func main() {var arr1 [5]int
    printArr(&arr1)
    fmt.Println(arr1)
    arr2 := [...]int{2, 4, 6, 8, 10}
    printArr(&arr2)
    fmt.Println(arr2)
}

首先我们可以看到定义了一个 printArr 方法,并在方法里面内置了一个长度为 5、int 类型的数组。紧接着我们将数组的第一个元素赋值为 10,紧接着对数组进行循环遍历,分别输出数组的索引及索引位置上的值

回到 main 方法中,我们定义了一个名叫 arr1,长度为 5,int 类型的数组,并直接打印该数组的地址值,同时调用函数打印出该数组未进行初始化时候的值,显而易见的是,由于我们在 printArr 中已经对索引位置为 1 的数组的值进行了一次修改,所以本次打印输出数组的时候,也会受到上一次数组的影响,所以本次数组打印输出的结果为 [10 0 0 0 0]。紧接着,我们定义了一个名叫 arr2,长度为任意,int 类型的数组,同时给予赋值操作,但是由于在 printArr 中索引为 1 的数组的位置的值已经发生了改变,所以本次 arr2 数组打印输出的结果为 [10 4 6 8 10]

求数组所有元素之和
package main
import (
    "fmt"
    "math/rand"
    "time"
)
func sumArr(a [10]int) int {
    var sum int = 0
    for i := 0; i 

我们首先定义了一个方法名叫 sumArr,同时往该方法里面传入一个名为 a,长度为 10,数据类型为 int 类型的数组。在本方法里面,我们定义一个变量为 sum,使用 for 循环来对数组进行遍历操作,同时使用 sum 来记录该数组各元素的和,最终返回 sum 的值

紧接着我们看到 main 方法,我们在该方法中使用 rand.seed() 函数来定义一个随机数,同时初始化一个名为 b,长度为 10,数据类型为 int 类型的数组使用 for 循环对该数组进行遍历,同时将随机数的值赋给 b 数组中元素。最终我们将数组 sumArr 中 b 的值赋给 sum,调用函数进行打印输出 sum 的值

例题:数组元素匹配问题

找出数组中和为给定值的两个元素的下标,例如数组 [1,3,5,8,7],

找出两个元素之和等于 8 的下标分别是(0,4)和(1,2)

求元素和,是给定的值

package main
import "fmt"
func myTest(a [5]int, target int) {
    // 遍历数组
    for i := 0; i 

根据题意,我们可以得知,在 myTest 方法里面我们定义了一个名为 a,长度为 5,数据类型为 int 类型的数组,同时还定义了一个目标值 target 用于检验元素和是否正确。

紧接着我们对该数组进行遍历,定义 other 变量用于表示另一个数组元素,这里进行二次遍历的原因是因为本条题目需要匹配数组中两个元素的值,因此进行二次遍历匹配数组中 i 的值,一旦与 other 匹配上,即打印输出该数组的值(两个元素)。

我们在 main 函数中对数组 b 进行变量初始化的赋值操作,以便进行方法的调用,如果在数组中能够找到 myTest()方法中的第二个,即 target 元素,就打印输出这两个元素,反之则什么都不打印

今天我们主要学习了 Go 语言在二维数组和遍历数组中的一些应用。如遍历数组的一个固定格式,亦或是数组的拷贝与传参,这些都值得读者去仔细推敲

阿里云 2 核 2G 服务器 3M 带宽 61 元 1 年,有高配

腾讯云新客低至 82 元 / 年,老客户 99 元 / 年

代金券:在阿里云专用满减优惠券

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2024-07-24发表,共计2220字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中