【C#】一维、二维、三维数组的使用

在C#中,数组是用于存储固定数量相同类型元素的数据结构。根据维度的不同,可以分为一维数组、二维数组(矩阵阵列)、三维数组等。每增加一个维度,数据的组织方式就会变得更加复杂。

一维数组

一维数组是最简单的数组形式,它是一个线性集合,包含一系列相同类型的元素。可以通过单个索引来访问每个元素。

int[] myArray = new int[5]; // 创建一个含有5个整数的一维数组
  • 存储一系列数据:例如,保存一个班学生的所有成绩。
  • 队列或栈:在一维数组中实现简单的队列(FIFO)或栈(LIFO)数据结构。

初始化

int[] numbers = new int[5]; // 创建一个含有5个整数的一维数组
// 或者使用集合初始化器
int[] numbersInit = {1, 2, 3, 4, 5};

访问元素

Console.WriteLine(numbers[0]); // 输出第一个元素
numbers[0] = 10; // 修改第一个元素的值

遍历

foreach (var num in numbers) {Console.WriteLine(num);
}

 

二维数组

二维数组可以视为“数组的数组”,通常用来表示表格或矩阵,需要两个索引(行和列)来定位一个特定的元素。

int[,] myMatrix = new int[3, 4]; // 创建一个3行4列的二维数组
  • 表格数据:用来表示电子表格或者数据库表,其中每一行代表一条记录,每一列代表字段。 
  • 图像处理:每个像素可以由二维数组的一个元素表示,其中包含颜色信息(如RGB值)。

初始化

int[,] matrix = new int[3, 4]; // 创建一个3x4的二维数组
// 或者使用集合初始化器
int[,] matrixInit = {{1, 2, 3, 4},{5, 6, 7, 8},{9, 10, 11, 12}
};

访问元素

Console.WriteLine(matrix[0, 0]); // 输出第一行第一列的元素
matrix[0, 0] = 100; // 修改第一行第一列的元素值

遍历

for (int i = 0; i < matrix.GetLength(0); i++) {for (int j = 0; j < matrix.GetLength(1); j++) {Console.Write(matrix[i, j] + " ");}Console.WriteLine();
}

 

三维数组

三维数组可以想象成多个二维数组堆叠在一起,形成了一个立方体结构,需要三个索引(深度、行、列)来定位一个元素。

int[,,] myCube = new int[2, 3, 4]; // 创建一个2x3x4的三维数组
  • 3D建模:三维数组可以用于表示三维空间中的点或体素(voxel),这对于计算机图形学和视频游戏中构建世界模型非常重要。 
  • 时间序列分析:对于随时间变化的二维数据集,比如天气预报中的温度读数(纬度、经度和时间),可以使用三维数组来组织这些数据。

初始化

double[,,] cube = new double[2, 3, 4]; // 创建一个2x3x4的三维数组
// 或者使用集合初始化器
double[,,] cubeInit = {{{1.1, 2.2, 3.3, 4.4}, {5.5, 6.6, 7.7, 8.8}, {9.9, 10.1, 11.1, 12.1}},{{13.1, 14.1, 15.1, 16.1}, {17.1, 18.1, 19.1, 20.1}, {21.1, 22.1, 23.1, 24.1}}
};

访问元素

Console.WriteLine(cube[0, 0, 0]); // 输出第一个体素的值
cube[0, 0, 0] = 100.0; // 修改第一个体素的值

遍历

for (int i = 0; i < cube.GetLength(0); i++) {for (int j = 0; j < cube.GetLength(1); j++) {for (int k = 0; k < cube.GetLength(2); k++) {Console.Write(cube[i, j, k] + " ");}Console.WriteLine();}Console.WriteLine("-----");
}

 

更高维度的数组

理论上,C#支持创建四维及更高维度的数组,但它们并不常用,因为随着维度的增加,理解和操作这些数组会变得非常复杂。多维数组使用更多的索引来定位元素,例如四维数组将需要四个索引。

 

注意事项

  • GetLength() 方法可以用来获取每个维度的长度。
  • 对于更高维度的数组,虽然理论上可以创建,但在实际编程中应谨慎使用,因为它们可能会导致代码难以理解和维护。
  • 在处理多维数组时,确保索引不会超出数组的界限,否则会导致IndexOutOfRangeException异常。

通过上述方法,你可以对不同维度的数组进行初始化、访问和遍历。

 

 

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

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

相关文章

网络安全警示录:.wex勒索病毒的独特特性与应对之道

在数字化时代&#xff0c;网络安全威胁层出不穷&#xff0c;其中勒索病毒已成为企业和个人用户面临的一大挑战。近年来&#xff0c;.wex勒索病毒以其独特的加密方式和广泛的传播手段&#xff0c;给全球网络安全带来了严重威胁。本文将深入探讨.wex勒索病毒的独特特性&#xff0…

【Golang学习之旅】Go + Redis 的缓存设计与优化

文章目录 前言1. Go与Redis的简介1.1 什么是Redis&#xff1f;1.2 为什么选择Redis&#xff1f; 2. Redis安装于配置2.1 安装Redis2.2 配置Redis 3. Go中使用Redis的基本操作3.1 连接Redis3.2 设置缓存3.3 删除缓存 4. 缓存设计与优化4.1 缓存的粒度设计4.2 缓存失效策略4.3 缓…

【STM32系列】利用MATLAB配合ARM-DSP库设计IIR数字滤波器(保姆级教程)

ps.源码放在最后面 设计FIR数字滤波器可以看这里&#xff1a;利用MATLAB配合ARM-DSP库设计FIR数字滤波器&#xff08;保姆级教程&#xff09; 设计IIR滤波器 MATLAB配置 设计步骤 首先在命令行窗口输入"filterDesigner"&#xff0c;接着就会跳出以下界面&#xf…

迁移学习 Transfer Learning

迁移学习&#xff08;Transfer Learning&#xff09;是什么&#xff1f; 迁移学习是一种机器学习方法&#xff0c;它的核心思想是利用已有模型的知识来帮助新的任务或数据集进行学习&#xff0c;从而减少训练数据的需求、加快训练速度&#xff0c;并提升模型性能。 &#x1f…

makefile 的strip,filter,ifeq,ifneq基础使用

目录 一、strip1.1 语法1.2 示例1.3 使用场景 二、filter2.1 语法2.2 示例2.3 使用 * 和 ? 通配符2.4 结合使用2.5 使用场景 三、ifeq 和 ifneq3.1 ifeq3.1.1 语法3.1.2 示例 3.2 ifneq3.2.1 语法3.2.2 示例 3.3 典型使用场景3.3.1 根据版本控制编译选项:3.3.2 选择不同的源文…

25/2/8 <机器人基础> 阻抗控制

1. 什么是阻抗控制&#xff1f; 阻抗控制旨在通过调节机器人与环境的相互作用&#xff0c;控制其动态行为。阻抗可以理解为一个力和位移之间的关系&#xff0c;涉及力、速度和位置的协同控制。 2. 阻抗控制的基本概念 力控制&#xff1a;根据感测的外力调节机械手的动作。位置…

RKMPP依赖硬件单元

rkmpp&#xff08;Rockchip Media Process Platform&#xff09;主要依赖瑞芯微&#xff08;Rockchip&#xff09;芯片中的 VPU&#xff08;Video Process Unit&#xff0c;视频处理单元&#xff09; 和 RGA&#xff08;Raster Graphic Acceleration Unit&#xff0c;2D图形加速…

android的ViewBinding的使用

参考&#xff1a; 安卓开发中的ViewBinding使用

C++线程池

使用线程情况比较频繁的地方&#xff0c;由于线程的创建及销毁都会产生对资源的占用及性能的损耗。为了优化性能&#xff0c;提升效率&#xff0c;在这种场景中&#xff0c;就应该使用线程池来处理任务。 线程池创建的关键点&#xff1a; 装载线程的容器&#xff0c;在C中使用…

一周发生AI事件总结(02.08)

本周人工智能领域发生的所有事件&#xff1a; Ilya Sutskever的初创公司正洽谈以约200亿美元估值进行融资&#xff1a;据路透社报道&#xff0c;由前OpenAI首席科学家Ilya Sutskever创立的人工智能初创公司Safe Superintelligence正洽谈以“至少”200亿美元的估值进行融资。该…

FFmpeg(一) 简介

FFmpeg 官网 FFmpeg 下载 ffmpeg-release-essentials.7z ffmpeg-release-full-shared.7z FFmpeg既是一款音视频编解码工具&#xff0c;同时也是一组音社频编解码开发套件 FFmpeg包含 多种音视频编码多种协议的流媒体多种色彩格式转换多种采样率转换多种码率转换多种丰富的…

Android内存性能优化量化指标

在 Android 开发中&#xff0c;对内存性能进行优化至关重要&#xff0c;这有助于提升应用的稳定性和流畅度&#xff0c;避免因内存问题导致的卡顿、崩溃等现象。以下是一些常见的 Android 内存性能优化量化指标&#xff1a; 内存占用指标 堆内存使用量 定义&#xff1a;堆内…

linux 基础知识点之工作队列workqueue

多年前就了解了workqueue着玩意&#xff0c;但理解上就并不是很很深刻&#xff0c;今天重新梳理一下&#xff0c;本文重点的是哪个些现成的demo代码&#xff0c;都是可以直接拿来用的&#xff0c;这就是写这文章的目的和作用&#xff0c;就是为了备份后续工作用到的时候&#x…

【CubeMX+STM32】SD卡 文件系统读写 FatFs+SDIO+DMA

本篇&#xff0c;将使用CubeMXKeil&#xff0c;创建一个SD卡的 FatFSSDIODMA 文件系统读写工程。 目录 一、简述 二、CubeMX 配置 FatFSSDIO DMA 三、Keil 编辑代码 四、实验效果 实现效果&#xff0c;如下图&#xff1a; 一、简述 上两篇&#xff0c;已循序渐进讲解了SD、…

docker环境下部署face-search开源人脸识别模型

由于我们是直接将face-search部署在docker容器中的,所以,在部署之前一定要检查一下自己的docker环境,要不然部署过程中会出现各种各样的问题 我这里的docker环境是 一、安装docker环境 如果docker版本比较低或者docker-compose的版本比较低的情况下,部署的时候docker的yml…

【Android开发AI实战】选择目标跟踪基于opencv实现——运动跟踪

文章目录 【Android 开发 AI 实战】选择目标跟踪基于 opencv 实现 —— 运动跟踪一、引言二、Android 开发与 AI 的融合趋势三、OpenCV 简介四、运动跟踪原理&#xff08;一&#xff09;光流法&#xff08;二&#xff09;卡尔曼滤波&#xff08;三&#xff09;粒子滤波 五、基于…

消费电子产品中的噪声对TPS54202的影响

本文章是笔者整理的备忘笔记。希望在帮助自己温习避免遗忘的同时&#xff0c;也能帮助其他需要参考的朋友。如有谬误&#xff0c;欢迎大家进行指正。 一、概述 在白色家电领域&#xff0c;降压转换器的应用非常广泛&#xff0c;为了实现不同的功能就需要不同的电源轨。TPS542…

5、大模型的记忆与缓存

文章目录 本节内容介绍记忆Mem0使用 mem0 实现长期记忆 缓存LangChain 中的缓存语义缓存 本节内容介绍 本节主要介绍大模型的缓存思路&#xff0c;通过使用常见的缓存技术&#xff0c;降低大模型的回复速度&#xff0c;下面介绍的是使用redis和mem0&#xff0c;当然redis的语义…

用 Python 给 Excel 表格截图(20250207)

我搜索了网络上的方案&#xff0c;感觉把 Excel 表格转换为 HTML 再用 platwright 截图是比较顺畅的路径&#xff0c;因为有顺畅的工具链。如果使用的是 Windows 系统则不需要阅读此文&#xff0c;因为 win32com 库更方便。这篇文章中 Excel 转 HTML 的方案&#xff0c;主要弥补…

ZooKeeper Watcher 机制详解:从注册到回调的全过程

引言 在分布式系统中&#xff0c;数据的实时性和一致性是至关重要的。ZooKeeper 通过其 Watcher 机制提供了一种高效的方式来监听数据变化或事件&#xff0c;从而使客户端能够在数据发生变化时立即收到通知。本文将深入探讨 ZooKeeper 的 Watcher 机制&#xff0c;具体包括客户…