【笔记】C#一维数组、多维数组和交错数组的区别总结
文章目录
- 前言
- 数组的概念
- 1,一维数组:
- 2,多维数组:
- 3,交错数组:
- 区别总结
- 结语
前言
😄大家好,我是writer桑, 这是自己整理的 C# 数组笔记,方便自己学习的同时分享出来,感谢支持。
数组的概念
数组表示可以将同一类型的多个变量存储在一个数组的数据结构中,同时分配指定的数组元素类型来声明数据元素的类型。
示例如下:
// 声明一个5个整数的一维数组。
int[] array1 = new int[5];// 声明和设置数组元素值。
int[] array2 = new int[] { 1, 3, 5, 7, 9 };// 替代语法
int[] array3 = { 1, 2, 3, 4, 5, 6 };//声明一个二维数组。
int[,] multiDimensionalArray1 = new int[2, 3];// 声明和设置数组元素值。
int[,] multiDimensionalArray2 = { { 1, 2, 3 }, { 4, 5, 6 } };// 声明一个交错数组。
int[][] jaggedArray = new int[6][];// 声明交错数组结构中第一个数组的值。
jaggedArray[0] = new int[4] { 1, 2, 3, 4 };
- 数组可以是一维、多维或者交错的,三者的区别在于声明数组的维度上
- 数组元素的默认值设置为零,而引用元素设置为 null,声明后的数组在生存期内无法被更改
- 数组元素可以通过索引进行访问,包含 n 个元素的数组的索引为 0 到 n-1
- 数组类型是从抽象的基类型 Array 派生的引用类型,数组元素可以是任何类型,其中包括本身的数组类型
- 所有数组都实现了 IList 和 IEnumerable,可以使用 foreach 语句循环访问数组和 Length 属性输出数组的长度。 单维数组还实现了 IList<T> 和 IEnumerable<T>
1,一维数组:
一维数组也是最简单、最常用的数组。在 C# 程序中使用 new 运算符实现一维数组,同时指定数组元素类型和元素数量。
示例如下:
// 声明一个元素数量为5的整数数组
int[] array1 = new int[] { 1, 3, 5, 7, 9 };// 声明字符串数组
string[] weekDays = new string[] { "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" };// 可以省略 new 表达式和数组类型, 称为隐式类型化数组
int[] array2 = { 1, 3, 5, 7, 9 };
string[] weekDays2 = { "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" };// 如果声明数组但未创建数组变量,则必须在引用该数组之前使用 new 运算符分配新数组
int[] array3;
array3 = new int[] { 1, 3, 5, 7, 9 };
2,多维数组:
多维数组表示在一维数组的基础上增加了维度,多维数组在声明和访问元素的方式和一维数组不同,但在实现和属性上跟一维数组没有本质的区别, 一维数组支持的操作多维数组也都支持。
示例如下:
// 二维数组
int[,] array2D = new int[,] { { 1, 2 }, { 3, 4 }, { 5, 6 }, { 7, 8 } };// 指定了维度的相同数组。
int[,] array2Da = new int[4, 2] { { 1, 2 }, { 3, 4 }, { 5, 6 }, { 7, 8 } };// 带有字符串元素的多维数组。
string[,] array2Db = new string[3, 2]
{ {"one", "two" }, { "three", "four"},{ "five", "six" }
};// 三维数组
int[,,] array3D = new int[,,]
{ { { 1, 2, 3 }, { 4, 5, 6 } },{ { 7, 8, 9 }, { 10, 11, 12 } }
};// 指定了维度的相同数组。
int[,,] array3Da = new int[2, 2, 3] { { { 1, 2, 3 }, { 4, 5, 6 } },{ { 7, 8, 9 }, { 10, 11, 12 } } };// 输出数组元素
Console.WriteLine(array2D[0, 0]);
Console.WriteLine(array2D[0, 1]);
Console.WriteLine(array2D[1, 0]);
Console.WriteLine(array2D[1, 1]);
Console.WriteLine(array2D[3, 0]);
Console.WriteLine(array2Db[1, 0]);
Console.WriteLine(array3Da[1, 0, 1]);
Console.WriteLine(array3D[1, 1, 2]);
3,交错数组:
交错数组也是一个数组,但数组元素也是数组,元素大小可以不同。交错数组称为是数组的数组,因此其元素为引用类型且被初始化为 null。在交错数组中可以混用交错数组和多维数组,所以在声明和访问元素的方式上和一维、多维数组不同。
using System; class ArrayTest
{static void Main(){// 声明包含两个元素的交错数组,并初始化元素 int[][] arr = new int[][]{new int[5] { 1, 3, 5, 7, 9 },new int[4] { 2, 4, 6, 8 }};// 循环语句输出数组 for (int i = 0; i < arr.Length; i++){Console.Write("Element({0}): ", i);for (int j = 0; j < arr[i].Length; j++){Console.Write("{0}{1}", arr[i][j], j ==(arr[i].Length - 1) ? "" : " ");}Console.WriteLine();}}
}/* 输出Element(0): 1 3 5 7 9Element(1): 2 4 6 8
*/
区别总结
一维数组和多维数组的区别:多维数组是对一维数组下标访问的一种改变, 例如 int[,] array2D = { { 1, 2 }, { 3, 4 } }; 等价于 int[] array2 = { 1, 2, 3, 4 };当以1为基准,二维数组arr2[][]和一维数组arr1[]的下标访问转换符合: arr2[i][j] = arr1[(i - 1)*n - i * (i - 1) / 2 + j - i];编译器会自动采用这种算法。
交错数组和一维、多维数组的区别:交错数组本质也是数组,只不过区别于其它数组的是交错数组的每个元素又是一个数组,也就是数组里面再嵌套数组这种逻辑。
结语
✔️ 以上就是 C# 中一维、多维及交错数组的区别总结,希望能够对大家有所帮助。望大家多多支持,你们的支持就是笔者创作最大的动力!
相关文章:
【笔记】C#一维数组、多维数组和交错数组的区别总结
文章目录前言数组的概念1,一维数组:2,多维数组:3,交错数组:区别总结结语前言 😄大家好,我是writer桑, 这是自己整理的 C# 数组笔记,方便自己学习的同时分享出…...
【SpringBoot】分布式日志跟踪—通过MDC实现全链路调用日志跟踪
一.MDC 1.MDC介绍 MDC(Mapped Diagnostic Context,映射调试上下文)是 log4j 和 logback 提供的一种方便在多线程场景下记录日志的功能。MDC 可以看成是一个与当前线程绑定的Map,可以往其中添加键值对。MDC 中包含的内容可以被同…...
【设计模式】创建型模式
简单工厂模式 系列综述: xxxxxxxxx 文章目录对象创建型模式简单(静态)工厂模式工厂方法模式参考博客😊点此到文末惊喜↩︎ 对象创建型模式 简单(静态)工厂模式 抽象原理 抽象产品基类 :定义了…...
Spark Catalyst 查询优化器原理
这里我们讲解一下SparkSQL的优化器系统Catalyst,Catalyst本质就是一个SQL查询的优化器,而且和 大多数当前的大数据SQL处理引擎设计基本相同(Impala、Presto、Hive(Calcite)等)。了解Catalyst的SQL优化流程&…...
贝叶斯分析法在市场调研中的应用
一、市场调研的需求场景 在营销活动的用研调研时,我们经常会去问用户在不同平台的品类付费情况,以对比大促期间本品和竞品分别在哪些品类上具有市场优势,他们之间的差距具体在哪里、差距有多大。假如根据调研问卷结果,我们知道拼多多用户有30%的人在大促购买生鲜类,而淘宝…...
JavaEE——MyBatis将查询结果集封装进POJO实体类
简单介绍 在之前的我们比较详细的介绍过MyBatis的配置信息的时候,在SQL映射文件中说过我们可以直接将结果集映射到我们的POJO实体类中,省去了我们自己处理查询结果集的时间和代码,接下来我们就来演示将单条数据和多条数据映射到我们POJO实体…...
C++11 包装器function
文章首发公众号:iDoitnow C提供了多个包装器,它们主要是为了给其他编程接口提供更一致或更合适的接口。C11提供了多个包装器,这里我们重点了解一下包装器function。 对于function, C 参考手册给出的定义为: 类模板 std::function…...
XCP实战系列介绍14-基于Vector_Davinci工具的XCP配置介绍(三)
本文框架 1.概述2. 其他模块配置2.1 XCP初始化3. 手工代码部分3.1 周期函数添加3.2 DAQ Event调用3.3 XCP模块本身代码3.4 标定量的添加1.概述 在对XCP的配置部分介绍中我们计划分别对通讯部分配置、XCP模块本身配置及其他相关模块配置三篇进行介绍,在前两篇我们介绍了XCP配置…...
计算机图形学:中点BH算法对任意斜率的直线扫描转换方法
作者:非妃是公主 专栏:《计算机图形学》 博客地址:https://blog.csdn.net/myf_666 个性签:顺境不惰,逆境不馁,以心制境,万事可成。——曾国藩 文章目录专栏推荐专栏系列文章序一、问题提出二、…...
(十一)、用户中心页面【uniapp+uinicloud多用户社区博客实战项目(完整开发文档-从零到完整项目)】
1,个人中心页面 1.1 新建个人中心页面 1.2 纯净版个人中心页面代码: <template><view class"user"><view class"top"><view class"group"><view class"userinfo"><!-- 顶部 左侧 头像 …...
LA@复数和复矩阵@实对称阵相关定理
文章目录复数🎈复矩阵和复向量共轭矩阵性质定理实对称阵的相关定理复数🎈 复数 (数学) (wikipedia.org) 加法:(abi)(cdi)(ac)(bd)i)减法:(abi)−(cdi)(a−c)(b−d)i)乘法:(abi)(cdi)acbciadibdi2(ac−bd)(bcad)i除法&…...
cmd set命令笔记
使用 set是cmd最基础的命令,每个人都会用,但其实它还是有些知识的。 set 用来接收入参 set /p var请选择(1或2或3): echo %var%可以接收输入的参数。 set /p var请选择(1或2或3): echo %var% 语法 he…...
IB学校获得IBO授权究竟有多难?
IB 学校认证之路,道阻且长 The road to IB school accreditation is long and difficult一所学校能获得IB授权必须经过IBO非常严格的审核,在办学使命&教育理念、组织架构、师资力量&授课技能、学校硬件设施和课程体系上完全符合标准才可获得授权…...
火山引擎 DataTester:A/B 测试,让企业摆脱广告投放“乱烧钱”
更多技术交流、求职机会,欢迎关注字节跳动数据平台微信公众号,回复【1】进入官方交流群 在广告投放的场景下,一线广告优化师通常会创建多个计划,去测试不同的广告素材效果。这套方法看似科学,实际上却存在诸多问题&…...
黑马redis学习记录:缓存
一、介绍 什么是缓存? 缓存(Cache),就是数据交换的缓冲区,俗称的缓存就是缓冲区内的数据,一般从数据库中获取,存储于本地代码 缓存无处不在 为什么要使用缓存? 因为速度快,好用缓存数据存储于代码中,而…...
CD20靶向药物|适应症|市场销售-上市药品前景分析
CD20是靶向治疗的第一个靶点,是B细胞淋巴瘤的现代治疗药物。CD20作为治疗剂的使用被认为是方便的,原因有二。首先,在 CD20 阳性肿瘤的情况下,这种受体大量存在于 B 淋巴细胞表面——每个细胞大约有十万个分子。其次,干…...
多源 复制
使复制从属服务器能够同时从多个主服务器接收事务至少需要两个主服务器和一个从属服务器设备从属服务器为每个主服务器创建一个 复制通道从属服务器必须使用基于表的资料档案库多源复制与基于文件的资料档案库不兼容不尝试检测或解决冲突如果需要此功能,则由应用程序…...
微服务项目【消息推送(RabbitMQ)】
创建消费者 第1步:基于Spring Initialzr方式创建zmall-rabbitmq消费者模块 第2步:在公共模块中添加rabbitmq相关依赖 <!--rabbitmq--> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-bo…...
vr电力刀闸事故应急演练实训系统开发
电力事故是在电力生产和输电过程中可能发生的意外事件,它们可能会对人们的生命财产安全造成严重的威胁。因此,电力事故应急演练显得尤为重要。而VR技术则可以为电力事故应急演练提供一种全新的解决方案。 在虚拟环境中,元宇宙VR会模拟各种触电…...
C++类和对象补充
目录 前言: 1. 构造函数->初始化列表 1.1 初始化列表出现原因 1.2 初始化列表写法 2. explicit关键字 2.1 explict的出现 2.2 explict的写法 3. static成员 4. 友元 4.1 友元函数 4.2 友元类 5. 内部类和匿名对象 5.1 内部类 5.2 匿名对象 前言&a…...
Prompt Tuning、P-Tuning、Prefix Tuning的区别
一、Prompt Tuning、P-Tuning、Prefix Tuning的区别 1. Prompt Tuning(提示调优) 核心思想:固定预训练模型参数,仅学习额外的连续提示向量(通常是嵌入层的一部分)。实现方式:在输入文本前添加可训练的连续向量(软提示),模型只更新这些提示参数。优势:参数量少(仅提…...
渗透实战PortSwigger靶场-XSS Lab 14:大多数标签和属性被阻止
<script>标签被拦截 我们需要把全部可用的 tag 和 event 进行暴力破解 XSS cheat sheet: https://portswigger.net/web-security/cross-site-scripting/cheat-sheet 通过爆破发现body可以用 再把全部 events 放进去爆破 这些 event 全部可用 <body onres…...
大语言模型如何处理长文本?常用文本分割技术详解
为什么需要文本分割? 引言:为什么需要文本分割?一、基础文本分割方法1. 按段落分割(Paragraph Splitting)2. 按句子分割(Sentence Splitting)二、高级文本分割策略3. 重叠分割(Sliding Window)4. 递归分割(Recursive Splitting)三、生产级工具推荐5. 使用LangChain的…...
关于 WASM:1. WASM 基础原理
一、WASM 简介 1.1 WebAssembly 是什么? WebAssembly(WASM) 是一种能在现代浏览器中高效运行的二进制指令格式,它不是传统的编程语言,而是一种 低级字节码格式,可由高级语言(如 C、C、Rust&am…...
Map相关知识
数据结构 二叉树 二叉树,顾名思义,每个节点最多有两个“叉”,也就是两个子节点,分别是左子 节点和右子节点。不过,二叉树并不要求每个节点都有两个子节点,有的节点只 有左子节点,有的节点只有…...
MFC 抛体运动模拟:常见问题解决与界面美化
在 MFC 中开发抛体运动模拟程序时,我们常遇到 轨迹残留、无效刷新、视觉单调、物理逻辑瑕疵 等问题。本文将针对这些痛点,详细解析原因并提供解决方案,同时兼顾界面美化,让模拟效果更专业、更高效。 问题一:历史轨迹与小球残影残留 现象 小球运动后,历史位置的 “残影”…...
Web中间件--tomcat学习
Web中间件–tomcat Java虚拟机详解 什么是JAVA虚拟机 Java虚拟机是一个抽象的计算机,它可以执行Java字节码。Java虚拟机是Java平台的一部分,Java平台由Java语言、Java API和Java虚拟机组成。Java虚拟机的主要作用是将Java字节码转换为机器代码&#x…...
tomcat入门
1 tomcat 是什么 apache开发的web服务器可以为java web程序提供运行环境tomcat是一款高效,稳定,易于使用的web服务器tomcathttp服务器Servlet服务器 2 tomcat 目录介绍 -bin #存放tomcat的脚本 -conf #存放tomcat的配置文件 ---catalina.policy #to…...
五子棋测试用例
一.项目背景 1.1 项目简介 传统棋类文化的推广 五子棋是一种古老的棋类游戏,有着深厚的文化底蕴。通过将五子棋制作成网页游戏,可以让更多的人了解和接触到这一传统棋类文化。无论是国内还是国外的玩家,都可以通过网页五子棋感受到东方棋类…...
WEB3全栈开发——面试专业技能点P4数据库
一、mysql2 原生驱动及其连接机制 概念介绍 mysql2 是 Node.js 环境中广泛使用的 MySQL 客户端库,基于 mysql 库改进而来,具有更好的性能、Promise 支持、流式查询、二进制数据处理能力等。 主要特点: 支持 Promise / async-await…...
