四、数组、切片,映射

news2024/10/3 23:33:01

一、一维数组

//声明一个包含5个元素的整型数组
var array [5]int
//具体数值填充数组
array := [5]int{1, 2, 3, 4, 5}
//容量由初始化值的数量决定
array := [...]int{1, 2, 3, 4, 5)
//只初始化索引为1和2的元素
array := [5]int{1: 10, 2: 20}
//修改索引为2的元素的值
array[2] = 35

//指针数组
//声明包含5个元素的指向整数的数组
//用整形指针初始化索引为0和1的数组
array := [5]*int{0: new(int), 1: new(int)}
//为索引为0和1的元素赋值
*array[0] = 10
*array[1] = 20

①数组一旦声明,其数据类型和数据长度就都不能改变
②数组长度和元素类型都相同的数组,可以直接用=相互赋值
③复制指针数组,只会复制指针的值,而不会复制指针所指向的值

二、多维数组

//声明一个二维整型数组
var array [4][2]int
//使用数组字面量来声明并初始化
array1 := [4][2]int{{10, 11}, {20, 21}, {30, 31}, {40, 41}}
//声明并初始化外层数组索引为1和3的元素
array2 := [4][2]int{1:{20, 21}, 3:{40, 41}}
//声明并初始化外层数组和内层数组的单个元素
array3 := [4][2]int{1: {0:20}, 3:{1: 41}}
//单个元素直接赋值
array1[0][0] = 10
//同种数组直接赋值
array1 = array2

三、切片
切片是一种数据结构,这种数据结构便于使用和管理数据集合。
切片围绕动态数组展开,可以按需自动增长和缩小,其动态增长是通过内置函数append来实现的。这个函数可以快速且高效的增长切片。
创建和初始化

//创建一个长度为3,容量为5个元素,容量即切片允许增长到的最大长度
slice := make([]int, 3, 5)
//创建一个长度和容量都是5个元素
slice :=  []int{10, 20, 30, 40, 50}
//改变值
slice[1] = 25
//创建一个新切片,其长度为2,容量为4
newSlice := slice[1:3]
//使用原来的容器来分配一个新元素,将新元素赋值为60
newSlice = append(newSlice, 60)
//使用append将一个切片追加到另一个切片,可变参数
append(slice, newSlice, ...)
//使用range遍历切片元素
for index, value := range slice {
	fmt.Printf("Index:%d Value: %d\n", index, value)
}
//使用传统的for循环对切片进行迭代
for index := 0; index < len(slice); index++{
	fmt.Printf("Index: %d Value: %d\n", index, slice[index])
}

//声明一个多维切片
slice := [][]int{{10}, {100, 200}}
//为第一个切片追加值为20的元素
slice[0] = append(slice[0], 20)
//在函数间传递切片
func foo(slice []int)[]int {
	...
	return slice
}

在这里插入图片描述
①简而言之,切片之所以被称为切片,是因为创建一个新的切片就是把底层数组切出一部分。
②对于底层数组容量是k的切片slice[i,j],其长度是j-i,容量是k-i.
③使用切片创建切片时,其公用一个底层数组,改变一个切片,另一个切片随之改变
④append会智能地处理底层数组的容量增长。在切片的容量小于1000个元素时,总是会成倍的增长容量,一旦元素超过1000,容量的增长因子会设为1.25。需注意的是,append智能增长时会使用一个新的底层数组。
⑤创建新切片时还可以使用第三个索引选项,用来控制新切片的容量
对于slice[i,j,k],其长度为j-i,其容量为k-i。
⑥使用range遍历切片元素时会返回两个值,第一个值时当前迭代到的索引位置,第二个时该位置对应元素值的一份副本
⑦对于切片,有两个内置的函数len和cap,分别返回长度及容量.
⑧在64位架构的机器上,一个切片需要24字节的内存;指针字段需要8字节,长度和容量字段分别需要8字节。由于切片关联的数据包含在底层数组里,不属于切片本身,所以将切片复制到任意函数时,对底层数组大小都不会有影响。

四、映射
映射是一种数据结构,用于存储一系列无序的键值对。其实现使用了散列表。

//创建一个映射,键的类型是string,值的类型是int
dict := make(map[string]int)
//创建一个映射,键的类型是string,值的类型是string,并初始化
dict := map[string]string{"Red": "#da1337", "Orange": "#e95a22"}
//从映射中取值并判断其是否存在
value, exists := dict["Blue"]
if exists {
	fmt.Println(value)
}
//遍历映射
for key, value := range dict {
	fmt.Printf("Key: %s Value: %s\n", key, value)
}
//删除
delete(dict, "Red")

注意:将切片或者映射传递给函数成本很小,并且不会复制底层的数据结构。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux文件系统、虚拟内存、进程与线程、锁

文章目录文件系统suLinux 中默认没有 super 命令/proc/etc/var/root/home/bin/dev/lib/sbintmp句柄maxfdPWDpathhomeexportwdfdu虚拟内存jobsLinux下一切皆文件swaponmkswap进程与线程nohup子进程与父进程unix进程间的通信方式线程的同步方式sedtarhistory硬链接ln&#xff08;…

Go分布式爬虫笔记(二十一)

文章目录21 切片和哈希表切片底层结构截取扩容哈希表原理哈希碰撞拉链法开放寻址法&#xff08;Open Addressing&#xff09;读取重建原理删除原理思考题Go 的哈希表为什么不是并发安全的&#xff1f;在实践中&#xff0c;怎么才能够并发安全地操作哈希表&#xff1f;拉链法开放…

软件设计师笔记-----程序设计语言与语言处理程序基础

文章目录七、程序设计语言与语言处理程序基础7.1、编译与解释&#xff08;低频&#xff09;7.2、文法&#xff08;低频&#xff09;7.3、有限自动机与正规式&#xff08;几乎每次都会考到&#xff09;有限自动机正规式7.4、表达式&#xff08;偶尔考到&#xff09;7.5、传值和传…

2023-详解实时数仓建设

一、实时数仓建设背景 1. 实时需求日趋迫切 目前各大公司的产品需求和内部决策对于数据实时性的要求越来越迫切&#xff0c;需要实时数仓的能力来赋能。传统离线数仓的数据时效性是 T1&#xff0c;调度频率以天为单位&#xff0c;无法支撑实时场景的数据需求。即使能将调度频…

网狐大联盟增加账号登陆功能

1. UI设计 2. 发布CSB文件,并添加到前端工程资源目录下 打开已发布csb文件所有目录 复制到工程目录 如果有用到其它目录的资源也要同步复制到工程资源对应目录中: 2.脚本功能编写 增加前端结构: -- 帐号登录 login.CMD_MB_LogonAccounts= {{t = "word", k = &#

企业电子招标采购系统源码—企业战略布局下的采购寻源

​ 智慧寻源 多策略、多场景寻源&#xff0c;多种看板让寻源过程全程可监控&#xff0c;根据不同采购场景&#xff0c;采取不同寻源策略&#xff0c; 实现采购寻源线上化管控&#xff1b;同时支持公域和私域寻源。 询价比价 全程线上询比价&#xff0c;信息公开透明&#xff…

一站式智慧仓储物流方案,免费帮你一屏搞定,领导不重用你都难!

在江苏无锡&#xff0c;菜鸟已经通过柔性自动化技术搭建了亚洲规模最大的无人仓&#xff0c;超过1000台无人车可以快速组合、分拆作业&#xff0c;生产效率可提升一倍多&#xff0c;大大节省了人工成本。智慧仓储物流作为物流的重要一环&#xff0c;也吸引了广泛关注。2022年双…

如何使用 Jetpack Compose 创建翻转卡片效果

如何使用 Jetpack Compose 创建翻转卡片效果 介绍 在电子商务和银行应用程序中输入卡信息是很常见的情况。我认为让用户更轻松地处理这种情况并创建更吸引眼球的 UI 将很有用。大多数应用程序/网站都喜欢它。 执行 在开发阶段&#xff0c;您需要做的是打开一个 Android 项目…

vim命令模式指令一览

提示&#xff1a;本文介绍了linux下vim中的快捷指令。 文章目录注意&#xff1a;本文所有指令都只在命令行模式下有效&#xff01;&#xff01;&#xff01; vim指令图&#xff1a; 指令解析命令解析h光标向左移动j光标向下移动k光标向上移动l光标向下移动yy/nyy复制当前行/赋…

2023最新面试题-Java-1

知其然知其所以然 Java之父&#xff1a;詹姆斯高斯林 (James Gosling)。 什么是Java Java是一门面向对象编程语言&#xff0c;不仅吸收了C语言的各种优点&#xff0c;还摒弃了C里难以理解的多继承、指针等概念。意思Java不支持多继承、指针。Java语言具有功能强大和简单易用…

《花雕学AI》14:免费打开就可用,ChatGPT国内12个镜像站盘点与测试

引言 人工智能聊天机器人是能和人说话的智能系统&#xff0c;它可以帮人做很多事。现在&#xff0c;人工智能聊天机器人很厉害&#xff0c;很多人想试试。ChatGPT是一个很厉害的人工智能聊天机器人&#xff0c;是OpenAI做的。它可以和人一样说话&#xff0c;还可以回答问题、承…

无线耳机哪个音质比较好?四百内音质最好的无线耳机排行

蓝牙耳机常常作为手机的伴生产品而出现在人们的日常生活当中&#xff0c;其使用场景也越来越广泛。而随着蓝牙技术的发展&#xff0c;蓝牙耳机在音质上的表现也越来越好。下面&#xff0c;我来给大家推荐几款四百内音质最好的无线耳机&#xff0c;一起来看看吧。 一、南卡小音舱…

射频功率放大器在液体超声声强的光电测量中的应用

实验名称&#xff1a;液体中超声声强的光电测量 研究方向&#xff1a;光电测量 测试目的&#xff1a; 声强是描述声场的基本物理量口&#xff0c;超声效应直接与声强有关。例如在工程技术领域&#xff0c;液体中的声场分布直接影响流场分布口&#xff0c;声强的大小影响着超声波…

腾讯云GPU云服务器、CVM云服务器、轻量应用服务器配置价格表

这就是腾讯云GPU云服务器、CVM云服务器、轻量应用服务器配置价格表&#xff0c;最近整理的。目前腾讯云服务器分为轻量应用服务器、CVM云服务器和GPU云服务器&#xff0c;首先介绍一下这三种服务器。 1、GPU 云服务器&#xff08;Cloud GPU Service&#xff0c;GPU&#xff09;…

主从模式、哨兵模式、集群模式(cluster)

主从模式、哨兵模式、集群模式&#xff08;cluster&#xff09; redis 实现高可用的方式分为 主从模式、哨兵模式、集群模式&#xff08;cluster&#xff09; 1. 主从模式&#xff08;又称为主从复制&#xff09; 表现为1个主节点&#xff0c;多个从节点&#xff0c;主节点负…

2023年Python选择题及答案解析【35道】

2023年Python练习题及答案解析1、在Python3中&#xff0c;运行结果为&#xff1a;2、在Python3中&#xff0c;字符串的变换结果为&#xff1a;3、在Python3中&#xff0c;下列程序运行结果为&#xff1a;4、在Python3中&#xff0c;下列程序结果为&#xff1a;5、a与b定义如下&…

【C++】基础篇

C基础篇什么是C命名空间命名空间的三种使用方式C的输入和输出缺省参数缺省参数分类函数重载引用引用的使用场景常引用指针和引用的区别auto关键字auto使用细则auto不能推导的场景基于范围的for循环范围for的使用条件指针空值nullptr什么是C 1982年&#xff0c;Bjarne Stroustr…

AutoGPT保姆级使用教程

1. 介绍Auto-GPT是一个基于ChatGPT的工具&#xff0c;他能帮你自动完成各种任务&#xff0c;比如写代码、写报告、做调研等等。使用它时&#xff0c;你只需要告诉他要扮演的角色和要实现的目标&#xff0c;然后他就会利用ChatGPT和谷歌搜索等工具&#xff0c;不断“思考”如何接…

目标检测【Object Detection】

文章目录基本概念两阶段目标检测算法R-CNNFast R-CNNFaster R-CNNFPNMask R-CNN一阶段目标检测算法SSDYOLOv1YOLOv2YOLOv3目标检测的常用数据集目标检测的标注工具基本概念 目标检测是计算机视觉中的一个重要问题&#xff0c;它的目的是从图像或视频序列中识别出特定的目标&am…

在window上安装python

在Windows上安装python 1.进入python官网https://www.python.org/ 下载配置环境,点击上方downloads,根据系统选择python环境下载(选择windows) 往下拉查找需要的版本并下载 下载后双击就可以安装python了 如何检验是否安装成功 通过【winr】调出【运行】弹窗&#xff0c;输…