Go——数组

        Golang Array和以往认知的数组有很大的。

  • 数组是同一种数据类型的固定长度的序列。
  • 数组定义:var a[len] int,比如:var a [5]int,数组长度必须是常量,且类型的组成部分。一旦定义,长度不能变。
  • 长度是数组类型的一部分,因此,var a[5] int和var a[10] int是不同的类型。
  • 数组可以通过下标进行访问,下标从0开始,最后一个元素下标是:len-1。
for i := 0; i < len(a); i++ {}for index, v := range a {}
  • 访问越界,如果下标在数组合法范围之外,则触发访问越界,会panic。
  • 数组是值类型,赋值和传参会复制整个数组,而不是指针。因此改变副本的值,不会改变本身的值。
  • 至此"==","!="操作符,因为内存总是被初始化过的。
  • 指针数组 [n] *T,数组指针 *[n]T。

        1.数组初始化

  • 一维数组
package mainimport ("fmt"
)// 全局变量
var arr0 [5]int = [5]int{1, 2, 3} //未初始化元素值为0
var arr1 = [5]int{1, 2, 3, 4, 5}
var arr2 = [...]int{1, 2, 3, 4, 5, 6}           //通过初始化值来确定数组长度
var str = [5]string{3: "hello world", 4: "tom"} //通过引号初始化元素func main() {//局部变量a := [3]int{1, 2}                          //未初始化元素值为0b := [...]int{1, 2, 3, 4, 5}               //通过初始化值来确定数组长度c := [5]string{3: "hello world", 4: "tom"} //通过引号初始化元素d := [...]struct {name stringage  uint8}{{"user1", 10}, //可以省略元素类型{"user2", 20}, //不要忘记最后的逗号}fmt.Println(arr0, arr1, arr2, str)fmt.Println(a, b, c, d)
}

  • 多维数组 
package mainimport "fmt"//全局变量
var arr0 [5][3]int
var arr1 [2][3]int = [...][3]int{{1, 2, 3}, {4, 5, 6}}func main() {//局部变量a := [2][3]int{{1, 2, 3}, {4, 5, 6}}b := [...][2]int{{1, 2}, {3, 4}, {5, 6}} //第二维度不能为...fmt.Println(arr0, arr1)fmt.Println(a, b)
}

2. 数组值拷贝

        数组是值类型,赋值和传参会复制整个数组,而不是指针。

        值拷贝行为会造成性能问题,通常会建议使用slice,或数组指针。

package mainimport "fmt"func test(a [2]int) {fmt.Printf("test-a:%p\n", &a)a[0] = 100a[1] = 100
}func main() {var a [2]intfmt.Printf("main-a:%p\n", &a)test(a)fmt.Println(a)
}

        因为值拷贝,地址不同,数据有没有修改。 

3. 内置函数

        内置函数len和cap都返回数组长度(元素数量)

package mainimport "fmt"func main() {var arr [2]int = [2]int{1, 2}fmt.Println(len(arr), cap(arr))arr2 := [...][2]int{{1, 2}, {3, 4}} //二维数组,其中一维数组是它的元素fmt.Println(len(arr2), cap(arr2))
}

注意:string底层是byte数组([]byte),len一个string类型的遍历,得到的是byte数组的长度。 

        4. 多维数组遍历 

package mainimport "fmt"func main() {arr2 := [...][2]int{{1, 2}, {3, 4}} //二维数组,其中一维数组是它的元素//使用内置函数lenfor i := 0; i < len(arr2); i++ {for j := 0; j < len(arr2[i]); j++ {fmt.Printf("arr2[%d][%d] = %d ", i, j, arr2[i][j])}}fmt.Println()//使用rangefor index1, v1 := range arr2 {for index2, v2 := range v1 {fmt.Printf("arr2[%d][%d] = %d ", index1, index2, v2)}}
}

 5. 数组拷贝和传参

        使用指针传参。

6. 数组练习

  • 求数组所有元素之和

package mainimport ("fmt""math/rand""time"
)func sumArr(a [10]int) int {sum := 0for i, v := range a {fmt.Printf("arr[%d]=%d ", i, v)sum += v}fmt.Println()return sum
}func main() {//随机数种子rand.Seed(time.Now().Unix())var b [10]intfor i := 0; i < len(b); i++ {b[i] = rand.Intn(1000) //产生一个0到1000的随机数}sum := sumArr(b)fmt.Println(sum)
}
  • 找到数组中和为给定值的两元素下标
package mainimport "fmt"func myTest(arr [6]int, val int) {for i := 0; i < len(arr); i++ {for j := len(arr) - 1; j > i; j-- {if arr[i]+arr[j] == val {fmt.Printf("(%d, %d)", i, j)}}}
}func main() {arr := [...]int{1, 2, 3, 4, 5, 6}myTest(arr, 8)
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/537261.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ip广播智慧工地广播喊话号角 IP网络号角在塔吊中应用 通过寻呼话筒预案广播

ip广播智慧工地广播喊话号角 IP网络号角在塔吊中应用 通过寻呼话筒预案广播 SV-704XT是深圳锐科达电子有限公司的一款壁挂式网络有源号角&#xff0c;具有10/100M以太网接口&#xff0c;可将网络音源通过自带的功放和号角喇叭输出播放&#xff0c;可达到功率50W。SV-704XT内置有…

机器学习模型—随机森林

机器学习模型—随机森林 随机森林(Random Forest)是由斯坦福大学教授Tin Kam Ho在1995年提出的一种组合学习模型。它可以用于分类和回归任务,并在很多现实世界的问题中表现出优异的性能。 随机森林本质上是通过构建多颗决策树,然后将单个树的预测结果进行组合,从而获得更加准…

Cesium--基于材质旋转图片

材质部分的代码如下 // 自定义材质const customMaterial new Cesium.Material({translucent: true,fabric: {uniforms: {image:circle_img,speed:30.0,},source: czm_material czm_getMaterial(czm_materialInput materialInput){czm_material material czm_getDefaultMateri…

【软考高项】四、信息化发展之数字中国

1、数字经济 定义&#xff1a;从本质上看&#xff0c;数字经济是一种新的技术经济范式&#xff0c;它建立在信息与通信技术的重大突破的基础上&#xff0c;以数字技术与实体经济融合驱动的产业梯次转型和经济创新发展的主引擎&#xff0c;在基础设施、生产要素、产业结构和治理…

opencv-python连通域分割connectedComponents

文章目录 连通域简介绘图代码函数说明 连通域简介 所谓连通域&#xff0c;即Connected Component&#xff0c;是一组彼此相连的像素点的集合&#xff0c;这些像素点彼此之间可以假设一条互相链接的路径&#xff0c;路径上所有像素的灰度一致&#xff0c;或者符合某个特定的条件…

HCIP —— BGP 路径属性 (上)

目录 BGP 路径属性 1.优选Preferred-Value属性值最大的路由 2.优选Local-preference 属性数值大的路由 3.本地始发的BGP路由优先于其他对等体处学习到的路由。 4..优选AS_PATH属性值最短的路由 BGP 路径属性 BGP的路由选路是存在优选规则的&#xff0c;下图为华为官网提供…

腾讯云服务器“地域”这么选就对了!

腾讯云服务器地域怎么选择&#xff1f;不同地域之间有什么区别&#xff1f;腾讯云哪个地域好&#xff1f;地域选择遵循就近原则&#xff0c;访客距离地域越近网络延迟越低&#xff0c;速度越快。腾讯云百科txybk.com告诉大家关于地域的选择还有很多因素&#xff0c;地域节点选择…

【django framework】ModelSerializer+GenericAPIView,如何在提交前修改某些字段值

【django framework】ModelSerializerGenericAPIView&#xff0c;如何在提交前修改某些字段值 我们经常会遇到下面这种情况&#xff1a; 序列化器用的是ModelSerializer&#xff0c;写视图的时候继承的是generics.CreateAPIView。现在我想在正式提交到数据库(perform_create)之…

Python算法(列表排序)

一。冒泡排序&#xff1a; 列表每两个相邻的数&#xff0c;如果前面比后面大&#xff0c;则交换这两个数 一趟排序完成后&#xff0c;则无序区减少一个数&#xff0c;有序区增加一个数 时间复杂度&#xff1a;O(n*n) 优化后&#xff1a;已经排序好后立马停止&#xff0c;加快…

浅谈HTTP 和 HTTPS (中间人问题)

前言 由于之前的文章已经介绍过了HTTP , 这篇文章介绍 HTTPS 相对于 HTTP 做出的改进 开门见山: HTTPS 是对 HTTP 的加强版 主要是对一些关键信息 进行了加密 一.两种加密方式 1.对称加密 公钥 明文 密文 密文 公钥 明文 2.非对称加密 举个例子就好比 小区邮箱 提供一…

PDF24 Creator PDF工具箱 v11.17.0

软件介绍 可将大部分文件转成pdf格式的免费软件&#xff0c;安装好后会在你的打印机里看到一个叫PDF24的虚拟打印机&#xff0c;你可将要转成pdf格式的文件打印时选虚拟打印机PDF24&#xff0c;也可以直接将文件以拖拉方式拉进这软件的主视窗编辑区里&#xff0c;它会自动转成…

react 综合题-旧版

一、组件基础 1. React 事件机制 javascript 复制代码<div onClick{this.handleClick.bind(this)}>点我</div> React并不是将click事件绑定到了div的真实DOM上&#xff0c;而是在document处监听了所有的事件&#xff0c;当事件发生并且冒泡到document处的时候&a…