Go语言基础:数组定义及循环遍历

前言

大家好,我是沐风晓月,本文go语言入门-掌握go语言函数收录于《go语言学习专栏》专栏,此专栏带你从零开始学习go语言,持续更新中,欢迎点赞收藏。

🏠个人主页:我是沐风晓月
🧑个人简介:大家好,我是沐风晓月,双一流院校计算机专业,阿里云博客专家
😉😉 💕 座右铭:先努力成长自己,再帮助更多的人,一起加油进步
🍺🍺🍺💕欢迎大家:这里是CSDN,我总结知识的地方,喜欢的话请三连,有问题请私信

文章目录

  • 前言
  • 一. 数组的介绍
    • 1.1 什么是数组?
    • 1.2 数据的声明及语法
  • 二. 数组的初始化
    • 2.1 指定长度和初始值
    • 2.2 不指定数组长度来初始化数组
    • 2.3 指定长度,通过索引值来初始化
    • 2.4 不指定长度,通过索引值进行初始化
    • 2.5 数组的访问
  • 三. 数组的比较
    • 3.1 数据类型相同,但长度不同
    • 3.2 数据类型相同且长度相同
  • 四. 数组的遍历
  • 五 . 二维数组
    • 5.1 二维数组的介绍
    • 5.2 二维数组的遍历
  • 总结

在这里插入图片描述

一. 数组的介绍

1.1 什么是数组?

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

  • 数组可以由0个元素或者多个元素组成,但不能增长和收缩。
  • go语言中,数组是一种值类型,元素可以被修改。
  • 数组的元素索引从0开始

1.2 数据的声明及语法

Go 语言数组声明需要指定元素类型及元素个数,语法格式如下:

var varName [SIZE]var Type

语法说明如下所示:

  • varName(数组变量名):数组声明及使用时的变量名。
  • SIZE(元素数量):数组的元素数量,可以是一个表达式,但最终通过编译期计算的结果必须是整型数值,元素数量 不能含有到运行时才能确认大小的数值。
  • Type(数组类型):可以是任意基本类型,包括数组本身,类型为数组本身时,可以实现多维数组。

举例: 定义一个数组mufeng,长度为10,类型为float32

var mufeng [10]  float32

二. 数组的初始化

2.1 指定长度和初始值

指定长度和初始化值,初始化数组中 {} 中的元素个数不能大于 [] 中的数字:

package main

import "fmt"

func main() {
	var mufeng = [5]float32{1.0, 2.0, 3.0, 4.0, 5.0}
	fmt.Println(mufeng)
}

这里要注意,初始值的元素之间需要用,隔开,当[5]中指定为5个,后面的大括号就不应该能大于5,但可以小于5. 小于5的时候,会有默认值补全。 比如数字类型,默认值就是0.

package main

import "fmt"

func main() {
	var mufeng = [5]float32{1.0, 2.0, 3.0, 4.0}
	fmt.Println(mufeng[4])   
	// 结果就为0
}

可以看到当我们获取mufeng下标为4的值的时候,结果就是0.

2.2 不指定数组长度来初始化数组

当我们不指定长度的时候,也就是[]中不写入内容,GO语言默认会根据元素的个数来设置数组的大小。

package main

import "fmt"

func main() {
	var mufeng = []int{1, 2, 3, 4}
	fmt.Println(mufeng)

}

2.3 指定长度,通过索引值来初始化

此时我们使用索引值来初始化,1:1就表示,下标为1的元素,初始值为1. 下标默认初始值为0,我们看下面的代码案例:

package main

import "fmt"

func main() {
	mufeng := [4]int{1:1, 2: 2}
	fmt.Println(mufeng)
	//执行结果为[0 1 2 0 ]
}

由执行结果可以看出,下标0 未定义,所以输出结果为0.

2.4 不指定长度,通过索引值进行初始化

如果我们不指定长度,系统会默认以你索引值的最大值来决定长度。 比如:

package main

import "fmt"

func main() {
	mufeng := []int{1: 1, 4: 2}
	fmt.Println(mufeng)
	//执行结果为[0 1  0 0  2]
}

这个脚本中,虽然没有指定长度,但是索引值最大是4,而且索引值为4的时候,初始化为2.,未初始化的都是0.

所以执行结果为 [0 1 0 0 2]。

2.5 数组的访问

数组的每个元素都可以通过索引下标来访问,索引下标的范围是从 0 开始到数组长度减 1 的位置,内置函数 len()可以返回数组中元素的个数。

package main

import "fmt"

func main() {
	mufeng := []int{1: 1, 4: 2}
	fmt.Println(mufeng)
	//执行结果为[0 1  0 0  2]

	var mufeng1 = [4]int8{2, 4, 6, 8}

	fmt.Println("对mfueng1取索引为3的值", mufeng1[3])
	//对mfueng1取索引为3的值 8
	fmt.Println("统计元素个数", len(mufeng1))
	//统计元素个数 4
}

想要获取第几位的值,就根据下表去访问,比如第一位的值 mufeng1[0],打印最后一个元素,但你不知道最后一个是第几位,就可以用len()

package main

import "fmt"

func main() {
	mufeng := []int{1: 1, 4: 2}
	fmt.Println(mufeng[len(mufeng)-1])
	//执行结果为2
}

这里的计算公式是: 先统计一共有多少个元素:len(mufeng), 而下标值就等于总元素的个数减1. len(mufeng)-1.

有了下标值之后,就可以根据下标获取元素值, 也就是mufeng(len[(mufeng) -1]).

三. 数组的比较

3.1 数据类型相同,但长度不同

我们学字符串类型的时候,经常会把 a== b把b复制给a, 但在数组这边,需要注意几个地方:

虽然数据类型相同,但长度不相等的两个数组,肯定是不相等的。 比如 [3]int [4] int,这其实是两种不同的数组类型。

mufeng := [2] int{1,2}
mufeng=[3]int{1,2,3}  这里的赋值方法是错误的,因为他们两个的长度不相等

3.2 数据类型相同且长度相同

如果两个数组类型相同(包括数组的长度,数组中元素的类型)的情况下,我们可以直接通过较运算符(==和!=)来判断两个数组是否相等,只有当两个数组的所有元素都是相等的时候数组才是相等的,不能比较两个类型不同的数组,否则程序将无法完成编译。
在这里插入图片描述
可以看到,当mufeng1 和mufeng2 以及mufeng4对标的时候,因为[]里的值不同,所以无法编译通过。

四. 数组的遍历

一维数组的声明及遍历代码:一个标准的for循环遍历及一个range调用遍历

  1. for...range迭代的性能会更好一些,他的语法:
for index,value := range myArray{
	//循环体
}


格式说明:

  • index:保存每个元素索引的变量
  • value:保存每个元素值的变量
  • myArray:正在处理的数组
package main

import "fmt"

func main() {

	var mufeng3 = []int{1, 2, 3, 4, 5}
	//for循环变量的方法
	//这里是把两种方法写一起了所以把上面的注释掉了
	//for i := 0; i <= len(mufeng3); i++ {
	//	fmt.Println(mufeng3[i])
	//}
	//fmt.Println("\n")
	//使用range的方法
	for _, value := range mufeng3 {

		fmt.Println(value, "\t")
	}
}

注意: 这里是把两种方法写在一起了,所以把上面的for循环注释掉了 。

推荐使用for range的方式。

补充: 使用fmt输出数组相关的信息:

package main

import "fmt"

func main() {

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

	fmt.Println(mufeng3)
	fmt.Printf("%#v", mufeng3)
	fmt.Printf("\n")
	fmt.Printf("%T", mufeng3)
}

输出结果:

[1 2 3 4 5]
[5]int{1, 2, 3, 4, 5}
[5]int  

五 . 二维数组

5.1 二维数组的介绍

有一个下标,我们叫一维数组,有两个下标的就是二维数组,一般日常开发中,用到三维数组以上的就比较少了。

二维数组的案例:

package main

import "fmt"

func main() {

	var mufeng [3][4]int
	mufeng[1][2] = 3
	mufeng[2][1] = 4

	fmt.Println(mufeng)
}

//  执行结果:
//[[0 0 0 0] [0 0 3 0] [0 4 0 0]]

为了便于理解,在这里我们把[1][2],定义为 第一个是[1]是a,第二个是[2]是b.

在这里插入图片描述

可以看到我们定义的mufeng[1][2] = 3,实际上就是 a1的b2的位置等于3. 如图所示:

在这里插入图片描述

5.2 二维数组的遍历

package main

import "fmt"

func main() {
	//一维数组定义
	//var 数组名 [元素个数] 数据类型
	//二维数组
	//var 数组名 [行个数][列个数] 数据类型
	var mufeng [3][4]int
	// 通过行和列的下标找到具体元素
	mufeng[1][2] = 1 //赋值操作
	mufeng[2][1] = 13
	mufeng[0][3] = 33
	//fmt.Print(arr)
	for i := 0; i < 3; i++ {
		for j := 0; j < 4; j++ {
			fmt.Print(mufeng[i][j], " ")
		}
		fmt.Println()
	}

}

执行结果:

0 0 0 33 
0 0 1 0  
0 13 0 0 

总结

以上就是今天的全部内容,希望对你有用。

💕 好啦,这就是今天要分享给大家的全部内容了,我们下期再见!
💕 本文由沐风晓月原创,首发于CSDN博客, 博客主页:mufeng.blog.csdn.net
💕 日拱一卒无尽有,功不唐捐终入海
💕 喜欢的话记得点赞收藏哦

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Postman接口与压力测试实例

Postman是一款功能强大的网页调试与发送网页HTTP请求的Chrome插件。它提供功能强大的 Web API & HTTP 请求调试。 1、环境变量和全局变量设置 环境变量可以使用在以下地方&#xff1a; URLURL paramsHeader valuesform-data/url-encoded valuesRaw body contentHelper fi…

RedgateClone启用并行工作流 crack

RedgateClone启用并行工作流 crack RedgateClone允许您轻松创建用于开发和测试场景的数据库的一次性副本。通过使用生产数据库的克隆来降低成本并提高测试和发布的质量。Redgate克隆支持Microsoft SQL Server、Postgres、Oracle和MySQL数据库。 红门克隆的好处 最多可节省99%的…

CentOS从gcc 4.8.5 升级到gcc 8.3.1

gcc -v查看当前gcc版本。 sudo yum install centos-release-scl-rh安装centos-release-scl-rh。 sudo yum install devtoolset-8-build安装devtoolset-8-build。 显示“Complete!”表示安装成功。 sudo yum install devtoolset-8-gdb安装devtoolset-8-gdb。 显示“Comple…

[JAVA]一步接一步的一起开发-图书管理系统(非常仔细,你一定能看懂)[1W字+]

目录 1.想法 2.框架的搭构 2.1图书 2.1.1Book类 2.1.2BookList类 2.2用户 2.2.1User抽象类 2.2.2AdminUser类&#xff08;管理者&#xff09; 2.2.3NormalUser 2.3操作 操作接口 借阅操作 删除操作 查询操作 归还图书 展示图书 退出系统 2.4小结 3.主函数的编…

【python实操】年轻人,别用记事本保存数据了,试试数据库吧

为什么用数据库&#xff1f; 数据库比记事本强在哪&#xff1f; 答案很明显&#xff0c;你的文件很多时候都只能被一个人打开&#xff0c;不能被重复打开。当有几百万数据的时候&#xff0c;你如何去查询操作数据&#xff0c;速度上要快&#xff0c;看起来要清晰直接 数据库比我…

Azure OpenAI 官方指南03|DALL-E 的图像生成功能与安全过滤机制

2021年1月&#xff0c;OpenAI 推出 DALL-E。这是 GPT 模型在图像生成方面的人工智能应用。其名称来源于著名画家、艺术家萨尔瓦多 • 达利&#xff08;Dal&#xff09;和机器人总动员&#xff08;Wall-E&#xff09;。DALL-E 图像生成器&#xff0c;能够直接根据文本描述生成多…

蓝桥杯真题——模拟灌溉系统

尽量每天都自己写一遍模板&#xff0c;记住模板就好写了 以下内容直接在模板内进行 基本任务&#xff1a;要求“模拟智能灌溉系统”能够实现土壤湿度测量、土壤湿度和时间显示、湿度阈值设 定及存储等基本功能。通过电位器 Rb2 输出电压信号&#xff0c;模拟湿度传感器输出信号…

常见排序算法(C语言实现)

文章目录排序介绍插入排序直接插入排序希尔排序选择排序选择排序堆排序交换排序冒泡排序快速排序递归实现Hoare版本挖坑法前后指针版本非递归实现Hoare版本挖坑法前后指针版本快排的优化三值取中小区间优化归并排序递归实现非递归实现计数排序排序算法复杂度及稳定性分析不同算…

C语言——字符串函数(2)和内存函数

(一)strtok函数dilimiters参数是个字符串&#xff0c;定义了用作分隔符的字符集合第一个参数指定一个字符串&#xff0c;它包含了0个或者多个由dilimiters字符串中一个或者多个分隔符分割的标记。strtok函数找到str中的下一个标记&#xff0c;并将其用 \0 结尾&#xff0c;返回…

第二章Vue组件化编程

文章目录模块与组件、模块化与组件化模块组件模块化组件化Vue中的组件含义非单文件组件基本使用组件注意事项使用 kebab-case使用 PascalCase组件的嵌套模板templateVueComponent一个重要的内置功能单文件组件Vue脚手架使用Vue CLI脚手架先配置环境初始化脚手架分析脚手架结构实…

vue路由的使用

地址&#xff1a; 入门 | Vue Router 一、导入vuerouter依赖包 注意&#xff0c;一定要先引入vue&#xff0c;再引入vue-router&#xff08;引入vue在引入vue-router的上面&#xff09;。不然会报错 <head><meta charset"utf-8"><title></ti…

算法:贪婪算法、分而治之

算法&#xff1a;贪婪算法、分而治之 文章目录1.贪婪算法计数硬币实例12.分而治之分割/歇征服/解决合并/合并实例23.动态规划对照实例34.基本概念算法数据定义数据对象内置数据类型派生数据类型基本操作1.贪婪算法 设计算法以实现给定问题的最佳解决方案。在贪婪算法方法中&am…

中国蚁剑AntSword实战

中国蚁剑AntSword实战1.基本使用方法2.绕过安全狗连接3.请求包修改UA特征伪造RSA流量加密4.插件使用1.基本使用方法 打开蚂蚁宝剑&#xff0c;右键添加数据&#xff1a; 输入已经上传马的路径和连接密码&#xff1a; 测试连接&#xff0c;连接成功&#xff01; GetShell了&…

【Linux】权限详解

前言首先我们先来看一下权限的概念&#xff1a;在多用户计算机系统的管理中&#xff0c;权限&#xff08;privilege&#xff09;是指某个特定的用户具有特定的系统资源使用权力&#xff0c;像是文件夹&#xff0c;特定系统指令的使用或存储量的限制。通常&#xff0c;系统管理员…

动态内存管理详细讲解

目录 1.为什么存在动态内存分配 2. 动态内存函数的介绍 2.1 malloc和free 2.2 calloc 2.3 realloc 今天要和大家分享的内容是的动态内存管理&#xff0c;我们先从他的定义入手学习。 1.为什么存在动态内存分配 我们到现在已经掌握了内存开辟的方式就是要么创建一个变量…

【差分数组】

差分数组一维差分差分数组的作用差分矩阵结语一维差分 输入一个长度为 n 的整数序列。接下来输入 m个操作&#xff0c;每个操作包含三个整数 l,r,c&#xff0c;表示将序列中 [l,r] 之间的每个数加上 c &#xff0c;请你输出进行完所有操作后的序列。 输入格式 第一行包含两个…

ArduPilot飞控之ubuntu22.04-Gazebo模拟

ArduPilot飞控之ubuntu22.04-Gazebo模拟1. 源由2. Gazebo安装2.1 ubuntu22.04系统更新2.2 安装Gazebo Garden2.3 安装ArduPilot Gazebo插件2.3.1 基础库安装2.3.2 源代码编译2.3.3 配置插件2.4 测试Gazebo Garden3. ArduPilot SITL Gazebo模拟3.1 Gazebo Garden模拟环境3.2 Ar…

大数据周会-本周学习内容总结07

目录 01【hadoop】 1.1【编写集群分发脚本xsync】 1.2【集群部署规划】 1.3【Hadoop集群启停脚本】 02【HDFS】 2.1【HDFS的API操作】 03【MapReduce】 3.1【P077- WordCount案例】 3.2【P097-自定义分区案例】 历史总结 01【hadoop】 1.1【编写集群分发脚本xsync】…

【Spring从成神到升仙系列 四】从源码分析 Spring 事务的来龙去脉

&#x1f44f;作者简介&#xff1a;大家好&#xff0c;我是爱敲代码的小黄&#xff0c;独角兽企业的Java开发工程师&#xff0c;CSDN博客专家&#xff0c;阿里云专家博主&#x1f4d5;系列专栏&#xff1a;Java设计模式、数据结构和算法、Kafka从入门到成神、Kafka从成神到升仙…

YOLOv7训练自己的数据集(手把手教你)

YOLOv7训练自己的数据集整个过程主要包括&#xff1a;环境安装----制作数据集----模型训练----模型测试----模型推理 一&#xff1a;环境安装 conda create -n yolov7 python3.8 conda activate yolov7 #cuda cudnn torch等版本就不细说了&#xff0c;根据自己的显卡配置自行…
最新文章