Go 数组

一、数组介绍

1、Array 介绍
  • 数组是指一系列同一类型数据的集合
  • 数组中包含的咩个数据被成为数组元素(element),这种类型可以是任意的原始类型,比如 int、string 等
  • 一个数组包含的元素格式被称为数组的长度
  • 在 Golang 中数组是一个长度固定的数据类型,数组的长度是类型的一部分,也就是[5]int和[10]int 是两个不同的类型
  • Golang 中数组的另一个特点是占用内存的连续性,也就是说数组中的元素是被分配到连续的内存地址中的, 因而索引数组元素的速度非常快
  • 和数组对应的类型是 Slice(切片),Slice 是可以增长和收缩的动态序列,功能也更灵活
  • 但是想要理解 slice 工作原理的话需要先理解数组,下面为大家讲解数组的使用

2、数组定义

var 数组变量名[元素数量]T

  • 比如:var a [5]int,数组的长度必须是常量,并且长度是数组类型的一部分
  • 一旦定义,长度不能变,[5]int和[4]int 是不同的类型
package main

import "fmt"

func main() {
    //定义一个长度为 3 元素类型为 int 的数组 a
    var a [3] int
    //定义一个长度为 3 元素类型为 int 的数组 b 并赋值
    var b [3] int
    b[0] = 60
    b[1] = 80
    b[2] = 100
    fmt.PrintIn(a)    //[0 0 0]
    fmt.Print(b)    //[60,80,100]
}
3、数组是值类型
  • 数组是值类型,赋值和传参会复制整个数组
  • 因此改变副本的值,不会改变本身的值
  • 注意:
    • 数组支付"=="、“!=”操作符,因为内存总是被初始化过的
    • [n]*T表示指针数组,*[n]T表示数组指针
package main

import "fmt"

func main(){
    a :=[3]int{10,20,30}
    modifyArray(a)    //在 modify 中修改的是 a 的副本 x
    fmt.PrintIn(a)    //[10,20,30]
}
func modifyArray(x [3]int){
    x[0] = 100
}

二、创建数组

1、自定义数组长度
package main

import "fmt"

func main(){
    // 1数组会初始化为 int 类型的零值
    var testArray [3] int
    fmt.PrintIn(testArray)    //[0 0 0]
    
    //2.使用指定的初始值完成初始化
    var numArray = [3]int{1,2}
    fmt.printIn(numArray)    //[1 2 0]

    var cityArray = [3]string{"北京","上海","深圳"}
    fmt.Println(cityArray)    //[北京 上海 深圳]
}
2、让编译器识别
  • 按照上面的方法每次都要确保提供的初始值和数组长度一致
  • 一般情况下我们可以让编译器根据初始值的个数自行推断数组的长度
package main

import "fmt"

func main(){
    var numArray = [...]int{1,2}
    fmt.PrintIn(numArray)    //[1 2]
    fmt.Printf("type of numArray:%T\n",numArray)    //type of numArray:[2]int

    var cityArray = [...]string{"北京","上海","深圳"}
    fmt.PrintIn(cityArray)    //[北京 上海 深圳]
    fmt.Printf("type of cityArray:%T\n", cityArray)  //type of cityArray:[3]string
}
3、指定索引值
  • 我们还可以使用指定索引值的方式来初始化数组
package main

import "fmt"

func main() {
	// 初始化一个整数数组,在下标1号和3号位置写入: 1   5
	a := [...]int{1: 1, 3: 5}
	fmt.Println(a)    // [0 1 0 5]
	fmt.Printf("type of a:%T\n", a)    //type of a:[4]int
}

三、数组的遍历

1、普通遍历数组
package main

import "fmt"

func main() {
	var a = [...]string{"北京", "上海", "深圳"}
	for i := 0; i < len(a); i++ {
		fmt.Println(a[i])
	}
}
/*
北京
上海
深圳
 */
2、k,v遍历数组
package main

import "fmt"

func main() {
	var a = [...]string{"北京", "上海", "深圳"}
	for index, value := range a {
		fmt.Println(index, value)
	}
}
/*
0 北京
1 上海
2 深圳
 */

四、多维数组

1、定义多维数组
package main

import "fmt"

func main() {
	a := [3][2]string{
		{"北京", "上海"},
		{"广州", "深圳"},
		{"成都", "重庆"},
	}
	fmt.Println(a)         //[[北京 上海] [广州 深圳] [成都 重庆]]
	fmt.Println(a[2][1])     //支持索引取值:重庆
}

2、遍历多维数组

package main
import "fmt"
func main() {
	a := [3][2]string{
		{"北京", "上海"},
		{"广州", "深圳"},
		{"成都", "重庆"},
	}
	for _, v1 := range a {   // v1 = [北京 上海]
		for _, v2 := range v1 {
			fmt.Println(v2)
		}
	}
}
/*
北京
上海
广州
深圳
成都
重庆
*/

五、数组练习

1、数组求和
package main

import "fmt"

func main() {
    var intArr2[5]int=[...]int{1,-1,9,90,12}
    sum := 0
    for _,val := range intArr2{
        //累计求和
        sum += val
    }
    
    //如何让平均值保留到小数
	fmt.Printf("sum=%v 平均值=%v \n\n", sum, float64(sum) / float64(len(intArr2)))
	// sum=111 平均值=22.2 
}
2、数组最大值
  • 声明一个数组 var intArr[5] = [...]int {1,-1,112,65,11}
  • 假定第一个元素就是最大值 下标就是 0
  • 然后从第二个元素开始循环比较,如果发现更嘎,则交换
package main
import "fmt"
func main() {
	var intArr = [...]int{1, -1, 112, 65, 11}
	maxValue := intArr[0]
	maxIndex := 0
	for i := 0; i < len(intArr); i++ {
		if maxValue < intArr[i] {
			maxValue = intArr[i]
			maxIndex = i
		}
	}
	fmt.Println("最大值", maxValue, "最大值索引值", maxIndex)
	// 最大值 112 最大值索引值 2
}

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

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

相关文章

基于可穿戴的健康监护终端--研究进展报告

基于可穿戴的健康监护终端--研究进展报告 1 引言2 传感器介绍2.1 呼吸速率传感器2.2 温度传感器2.3 心脏跳动传感器 3 论文介绍3.1 Effective Data Decision-Making and Transmission System Based on Mobile Health for Chronic Disease Management in the Elderly3.2 Design …

Android 编译的配置文件:android.mk 和android.bp

Android.bp文件首先是Android系统的一种编译配置文件&#xff0c;是用来代替原来的Android.mk文件的。在Android7.0以前&#xff0c;Android都是使用make来组织各模块的编译&#xff0c;对应的编译配置文件就是Android.mk。在Android7.0开始&#xff0c;Google引入了ninja和kat…

C# 实现微信退款及对帐

目录 需求 基础准备 关键代码 操作界面 ​编辑 退款订单类及方法 退款功能实现 对帐 支付商家后台相关要点 实时交易帐单查询 精确交易帐单查询 小结 需求 在招聘报名系统里&#xff0c;考务费支付是其中一个环节&#xff0c;支付方式很多种&#xff0c;比如银联、…

基于单片机的智能饮水机控制系统(论文+源码)

1. 系统设计 本次智能饮水机控制系统的设计研究一款以STC89C52单片机为核心的智能饮水机控制系统&#xff0c;其主要功能设计如下&#xff1a; 1.该饮水机利用DS18B20数字温度传感器实时采集饮水机内水的温度&#xff0c;其检测温度范围为0-100℃&#xff0c;精度0.1℃&#…

单片机薪资翻倍的学习方向

今天以一个案例&#xff0c;给大家分析下做单片机开发&#xff0c;薪资翻倍的底层逻辑和方法论&#xff0c;尽量做到有理有据。 我是2011年开始做单片机开发的&#xff0c;那几年&#xff0c;单片机的工资&#xff0c;可以说是惨不忍睹。 相关贴吧也是一片哀嚎&#xff0c;有些…

Flutter 桌面应用开发之读写Windows注册表

文章目录 需求来源Windows查询Windows版本号方法1. 如何查看Windows版本号2. Windows开发如何通过代码查询Windows版本号(1) 使用C#代码&#xff1a;(2) 使用VB.NET代码 3.通过注册表查看Windows版本信息 Flutter查询Windows版本号方法依赖库支持平台实现步骤1. 在pubspec.yaml…

android13(T) 客制化预置语言列表

效果图 需求分析 这个列表界面一般都是后来手动添加后才现实的&#xff0c;通过分析源码发现通过如下值可控 adb shell settings get system system_locales zh-CN,ja-JP,en-AT 所以只需查询出这个值&#xff0c;然后加在 SettingProvider 中即可 隐藏 bug 如果客户要求默…

Java学习路线第二篇:Java Web

这篇则分享Java学习路线第二part&#xff1a;Java Web 恭喜你已经成功追到第二章节啦&#xff0c;要被自己的努力感动到了吧&#xff0c;而这节将承担起学完Java web 的使命&#xff0c;本使命为单向契约&#xff0c;你可选择YES或者选择YES。 HTMLCSSJavaScript(JS) 【动…

使用Python进行帧提取及指定帧插入实现文本隐写(CTF杂项出题方向)

视频是由一系列连续的图像帧组成的&#xff0c;每一帧都是视频的静止画面。这些帧以一定的速率播放&#xff0c;就形成了运动的视频。以下是视频帧的一些基本概念&#xff1a; 帧率&#xff08;Frame Rate&#xff09;&#xff1a; 帧率表示每秒播放的图像帧数量。通常以“帧/秒…

文章采集器-免费的文章采集工具大全

在当今信息爆炸的时代&#xff0c;获取有效的信息变得尤为关键。随之而来的问题是&#xff0c;如何高效地从海量信息中筛选出我们所需的内容呢&#xff1f;文章采集器应运而生&#xff0c;它就像是信息世界中的一把神奇的筛子&#xff0c;能够帮助我们从大海一般的信息中捞取我…

基于CW32F030单片机的便携式多功能测试笔

一、产品背景 在日常的硬件调试工作中&#xff0c;我们最常使用的仪器仪表可能就是万用表了&#xff0c;虽然万用表号称“万用”&#xff0c;但大部分时候&#xff0c;我们需要使用到的功能无非是电压测量和通断测量。 作为调试的“得力干将”&#xff0c;万用表有时候也会存…

免费四款国内AI写作工具,初涉自媒体的新手必备

许多初涉自媒体的新手在运营中时常感到困扰&#xff1a;每天都在不停地输出内容&#xff0c;却早已陷入了不知道写或拍什么的迷茫。如果你也面临着这样的烦恼&#xff0c;那么不妨尝试以下四款国内AI写作工具&#xff0c;它们不仅能助你轻松创作文章&#xff0c;仅需3分钟即可完…

asp.net mvc游戏门户网站

c#asp.net mvc 说明文档 运行前附加数据库.mdf&#xff08;或sql生成数据库&#xff09; 主要技术&#xff1a; 基于asp.net mvc架构和sql server数据库&#xff0c;并采用EF实体模型开发三层架构BLL DAL 功能模块&#xff1a; 前端展示首页 新闻公告 英雄档案 视频图片 管理…

同为科技(TOWE)模块化定制化让每条PDU实现专属供电解决方案

作为追求最高功率和空间效率的动态数据中心的理想产品&#xff0c;模块化、定制化PDU是追求最高功率和空间效率的动态数据中心的理想产品。同为科技&#xff08;TOWE&#xff09;是我国PDU行业的开创者和领导者&#xff0c;曾率先于中国电源分配单元http://www.pdu.com.cn网站上…

运维 | 四层和七层负载均衡介绍

关注: CodingTechWork 负载均衡 负载均衡介绍 概念 负载均衡是建立在现有的网络结构之上&#xff0c;提供一种廉价且透明的方式进行网络设备和服务器带宽的扩展&#xff0c;从而增加吞吐量&#xff0c;加强应用服务的数据处理能力&#xff0c;有效提高网络的灵活性和可用性。…

Webshell混淆免杀的一些思路

简介 为了避免被杀软检测到&#xff0c;黑客们会对Webshell进行混淆免杀。本文将介绍一些Webshell混淆免杀的思路&#xff0c;帮助安全人员更好地防范Webshell攻击。静态免杀是指通过对恶意软件进行混淆、加密或其他技术手段&#xff0c;使其在静态分析阶段难以被杀毒软件或安…

SQL注入-HTTP头注入

目录 HTTP Header概述 HTTP Header注入 HTTP Header注入概述 HTTP Header注入实例 HTTP Header概述 HTTP工作原理 HTTP请求方法 HTTP报文类型 请求报文&#xff08;HTTP Request&#xff09;&#xff1a;由客户端发给服务器的消息&#xff0c;其组成包括请求行&#xff08;R…

pikachu靶场:php反序列化漏洞

pikachu靶场:php反序列化漏洞 文章目录 pikachu靶场:php反序列化漏洞代码审计漏洞利用 代码审计 像这种反序列化的代码基本都是代码审计出的 // 定义一个名为S的类&#xff0c;该类有一个属性$test和一个构造函数 class S{ var $test "pikachu"; // $test是一个…

汉威科技全系列VOC气体检测产品,护航绿色低碳安全发展

可能很多人都不知道&#xff0c;危化品爆炸、城市光化学烟雾污染&#xff08;如英国伦敦烟雾事件&#xff09;、城市灰霾、温室效应、臭氧层空洞等问题背后的元凶都是VOC。VOC(Volatile Organic Compounds)即挥发性有机物&#xff0c;这类物质易挥发&#xff0c;且普遍具有毒性…

flutter布局详解及代码示例(上)

布局 基本布局 Row&#xff08;水平布局&#xff09;&#xff1a;在水平&#xff08;X轴&#xff09;方向上排列子widget的列表。Column&#xff08;垂直布局&#xff09;&#xff1a;在垂直&#xff08;Y轴&#xff09;方向上排列子widget的列表。Stack&#xff08;可重叠布…