四、数组、切片,映射

news/2024/5/9 20:58:15/文章来源:https://blog.csdn.net/weixin_44014982/article/details/130093924

一、一维数组

//声明一个包含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.luyixian.cn/news_show_286165.aspx

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

相关文章

Spring学习(五):一篇讲清楚动态代理(jdk和cglib)的使用、原理和源码

目录 一、jdk动态代理的基本使用 二、cglib动态代理的基本使用 2.1 方法一&#xff1a;method.invoke() 方法反射调用 2.2 方法二&#xff08;spring使用的这个方法&#xff09;&#xff1a; methodProxy.invoke() 2.3 方法三&#xff1a;methodProxy.invokeSuper() 三、…

ABP vNext电商项目落地实战(一)

一、落地条件&#xff1a; 1. .NET5版本 2. DDD 3. ABP vNext 4.ABP CLI &#xff08;ABP的命令行工具&#xff0c;包括ABP的各种模板&#xff09; 5.SQL Server 写在前面&#xff1a;我觉得这个框架的文件分层很凌乱&#xff0c;在企业的实际业务场景中&#xff0c;一般…

RHCSA练习作业(二)

目录 题目一 题目二 题目三 第四题 第五题 题目一 文件查看&#xff1a;查看/opt/passwd文件的第六行&#xff08;使用head和tail指令&#xff09; 代码如下&#xff1a; head -6 /opt/passwd | tail -1 题目二 在/etc及其子目录中&#xff0c;查找host开头的文件&#x…

虚拟机Ubuntu 18.04安装dpdk18.11

1 虚拟机用了2个核&#xff0c;2G内存&#xff0c;3个网卡 2 去http://core.dpdk.org/download/下载了18.11 3 安装apt-get install libnuma-dev 4 运行ifconfig down ***停掉2个网卡&#xff0c;方便后面添加到dpdk 5 解压后&#xff0c;进入usertools&#xff0c;运行dpd…

用AI帮我写一篇关于FPGA的文章,并推荐最热门的FPGA开源项目

FPGA定义 FPGA&#xff08;Field Programmable Gate Array&#xff09;是一种可编程逻辑器件&#xff0c;可以在硬件电路中实现各种不同的逻辑功能。与ASIC&#xff08;Application Specific Integrated Circuit&#xff0c;特定应用集成电路&#xff09;相比&#xff0c;FPGA…

SQL 条件函数 日期函数 文本函数 窗口函数

玩了几天&#xff0c;劳逸结合&#xff0c;继续复习刷题sql 一、条件函数 1.题目&#xff1a;现在运营想要将用户划分为25岁以下和25岁及以上两个年龄段&#xff0c;分别查看这两个年龄段用户数量&#xff08;age为null 也记为 25岁以下&#xff09; user_profile 期望结果&…

由浅入深掌握Python多线程原理与编程步骤

由浅入深掌握Python多线程编程一、 Python多线程编程原理1. 什么是线程2. 线程工作原理3. Python全局锁与线程关系4. Python 支持多线程的模块二、由简单的示例初步了解多线程编程步骤三、标准库 threading 模块介绍1. threading 模块的主要属性、方法&#xff0c;以及公共函数…

C++ [图论算法详解] 欧拉路欧拉回路

蒟蒻还在上课&#xff0c;所以文章更新的实在慢了点 那今天就来写一篇这周刚学的欧拉路和欧拉回路吧 讲故事环节&#xff1a; 在 一个风雪交加的夜晚 18世纪初普鲁士的哥尼斯堡&#xff0c;有一条河穿过&#xff0c;河上有两个小岛&#xff0c;有七座桥把两个岛与河岸联系…

Python手写板 画图板 签名工具

程序示例精选 Python手写板 画图板 签名工具 如需安装运行环境或远程调试&#xff0c;见文章底部个人QQ名片&#xff0c;由专业技术人员远程协助&#xff01; 前言 这篇博客针对<<Python手写板 画图板 签名工具>>编写代码&#xff0c;代码整洁&#xff0c;规则&am…

Diffusion模型系列文章

DDPM 论文 扩散模型包括两个过程&#xff1a;前向过程&#xff08;forward process&#xff09;和反向过程&#xff08;reverse process&#xff09;&#xff0c;其中前向过程又称为扩散过程&#xff08;diffusion process&#xff09;&#xff0c;如下图所示&#xff0c;从x…

如何定位Spark数据倾斜问题,解决方案

文章目录前言一、数据倾斜和数据过量二、 数据倾斜的表现三、定位数据倾斜问题定位思路&#xff1a;查看任务-》查看Stage-》查看代码四、7种典型的数据倾斜场景解决方案一&#xff1a;聚合元数据解决方案二&#xff1a;过滤导致倾斜的key解决方案三&#xff1a;提高shuffle操作…

1.docker-安装及使用

1.安装步骤 Install Docker Engine on CentOS 1. 确定CenOS7及以上版本 cat /etc/redhat-release2.卸载旧版本 yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-engine3.yum安…

Spimes x5.0主题模板全开源源码/Typecho主题模板

☑️ 品牌&#xff1a;Typecho ☑️ 语言&#xff1a;PHP ☑️ 类型&#xff1a;主题模板 ☑️ 支持&#xff1a;PCWAP &#x1f389;有需要的朋友记得关赞评&#xff0c;底部分享获取&#xff01;&#xff01;&#xff01; &#x1f389; ✨ 源码介绍 Spimes x5.0主题模板全开…

基于overleaf 的美国大学生数学建模竞赛(美赛)latex 格式模板(含信件和附件)

可能是最后一次打美赛了&#xff0c;感觉有的东西不整理整理有点对不起自己的经历。感觉为这个比赛付出过挺多的&#xff0c;这几次参赛的经历也从各种方面提升了我的能力&#xff0c;相信未来的自己也还会怀念这段时光。 个人认为美赛的难点之一就是优质资源难得&#xff0c;…

Pytorch深度学习笔记(三)线性模型

目录 1.机械学习的过程 2.线性模型 1.机械学习的过程 机械学习的过程&#xff1a; 1.准备数据集DataSet——>2.选择模型Model——>3.训练Training——>4.推理Infering 监督学习&#xff1a;用已知标签的训练样本训练模型&#xff0c;用来预测未来输入样本的标签&#…

Android---内存泄漏检测核心原理

目录 LeakCanary 核心原理 LeakCanary 检测对象的类型 ReferenceQueue 与 WeakReference LeakCanary 里的监控列表与保留列表 常见内存泄漏案例 1. 单例导致内存泄漏 2. 静态变量导致内存泄漏 3. 非静态内部类导致内存泄漏 4. 未取消注册或回调导致内存泄漏 5. Timer…

ChatGPT的发展对客户支持能提供什么帮助?

多数组织认为客户服务是一种开销&#xff0c;实际上还可以将客户服务看成是一种机会。它可以让你在销售后继续推动客户的价值。成功的企业深知&#xff0c;客户服务不仅可以留住客户&#xff0c;还可以增加企业收入。客户服务是被低估的手段&#xff0c;它可以通过推荐、见证和…

AI绘画与虚拟人生成实践(一):生成人像,AI绘画模型和工具的效果对比

本篇的目的是生成一个虚拟的女生形象。先进入正题说明人像怎么生成,本篇使用到的工具和工具的介绍放在文末。 先来一波Midjourney生成的美图提升下大家学习的欲望 以上四张图使用的是相同的Prompt,如下: a beautiful chinese girl, 18 years old, detailed and big eye…

【c++初阶】命名空间的定义

命名空间的定义一.缺陷二.namespace和::三.访问namespace四.一些注意1.工程里标准库的展开2.命名域的小技巧一.缺陷 在c语言中&#xff0c;如果我们同时定义一个全局变量和一个局部变量并且使用同一个名称的话&#xff0c;是可以编过的&#xff08;因为全局和局部是属于两个不同…

算法训练Day25:216.组合总和III ,17.电话号码的字母组合

文章目录[组合总和 III](https://leetcode.cn/problems/combination-sum-iii/description/)题解电话号码的字母组合题解组合总和 III CategoryDifficultyLikesDislikesContestSlugProblemIndexScorealgorithmsMedium (71.84%)6570--0 TagsCompanies 找出所有相加之和为 n 的 …