C#数组(一维数组、多维数组、交错数组、参数数组)

在 C# 中,数组是一种用于存储固定大小的相同类型元素的集合。数组可以包含值类型、引用类型或对象类型的元素,并且在内存中是连续存储的。以下是关于 C# 数组的详细介绍:

1. 一维数组

声明与初始化
// 声明数组
int[] numbers;             // 声明但未初始化
int[] scores = new int[5]; // 初始化长度为5的数组(默认值为0)
​
// 声明并初始化元素
string[] names = new string[3] { "Alice", "Bob", "Charlie" };
int[] primes = { 2, 3, 5, 7, 11 };       // 简化语法
访问与修改元素
int[] arr = new int[3];
arr[0] = 100;          // 设置元素
int value = arr[0];    // 获取元素(索引从0开始)
数组长度
int length = arr.Length; // 获取数组长度(只读属性)

2. 多维数组

二维数组
// 声明与初始化
int[,] matrix = new int[3, 4];          // 3行4列的矩阵
int[,] table = { {1,2}, {3,4}, {5,6} }; // 3行2列
​
// 访问元素
matrix[0, 1] = 10;  // 第1行第2列
int val = table[2, 0]; // 获取第3行第1列的值
三维数组
int[,,] cube = new int[2, 2, 2]; // 三维数组
cube[0, 1, 0] = 20;

3. 交错数组(数组的数组)

交错数组是一个数组,其元素是数组,每个子数组可以有不同的长度。

// 声明与初始化
int[][] jaggedArray = new int[3][];  // 包含3个数组的交错数组
jaggedArray[0] = new int[2];         // 第一个子数组长度为2
jaggedArray[1] = new int[3] {1,2,3}; // 第二个子数组长度为3
​
// 简化语法
int[][] jagged = {new int[] {1,2},new int[] {3,4,5}
};
​
// 访问元素
int x = jagged[1][2]; // 获取第二个子数组的第三个元素

4. 数组方法与属性

常用属性
  • Length:获取数组总元素数(多维数组返回所有维度的乘积)。

  • Rank:获取数组的维数(例如,二维数组返回 2)。

常用方法
int[] nums = { 3, 1, 4 };
​
// 排序
Array.Sort(nums);         // 升序排序:[1,3,4]
​
// 反转
Array.Reverse(nums);      // 反转数组:[4,3,1]
​
// 查找元素
int index = Array.IndexOf(nums, 3); // 返回索引1
​
// 填充元素
Array.Fill(nums, 0);      // 所有元素设为0:[0,0,0]
​
// 复制数组
int[] copy = new int[3];
Array.Copy(nums, copy, 3); // 复制nums到copy

5. 数组遍历

for 循环
int[] arr = { 1, 2, 3 };
for (int i = 0; i < arr.Length; i++) {Console.WriteLine(arr[i]);
}
foreach 循环
foreach (int num in arr) {Console.WriteLine(num);
}
LINQ 查询
using System.Linq;
var evenNums = arr.Where(n => n % 2 == 0);

6. 数组与泛型集合

数组是固定大小的,而泛型集合(如 List<T>)可以动态调整大小:

using System.Collections.Generic;
​
List<int> list = new List<int>();
list.Add(10);         // 添加元素
list.AddRange(arr);   // 添加数组元素
int count = list.Count; // 获取元素数

7. 参数数组(params)

允许方法接受可变数量的参数:

void PrintNumbers(params int[] numbers) {foreach (int num in numbers) {Console.WriteLine(num);}
}
​
// 调用
PrintNumbers(1, 2, 3);     // 传递多个参数
PrintNumbers(new int[]{4,5}); // 传递数组

8. 数组协变(Covariance)

引用类型数组支持协变,即子类数组可以隐式转换为父类数组:

object[] objArray = new string[5]; // 合法:string是object的子类
objArray[0] = "hello";
objArray[1] = 123; // 运行时异常:不能将int赋值给string[]

总结

类型语法特点
一维数组int[] arr;元素连续存储,固定长度
多维数组int[,] matrix;矩形结构,每维长度固定
交错数组int[][] jagged;数组的数组,子数组长度可变
参数数组params int[] numbers方法接受可变数量的参数

数组是 C# 中基础且重要的数据结构,适合存储和处理固定大小的数据集。对于动态数据,建议使用泛型集合(如 List<T>)。

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

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

相关文章

Dify离线安装包-集成全部插件、模板和依赖组件,方便安可内网使用

项目介绍 Dify一键离线安装包&#xff0c;集成安装了全部插件、模板&#xff0c;并集成了dify全部插件所需的依赖组件。方便你在内网、安可环境等离线状态下使用。 Dify是一个开源的LLM应用开发平台。其直观的界面结合了AI工作流、RAG管道、Agent、模型管理、可观测性功能等&…

面试150 翻转二叉树

思路 采用先序遍历&#xff0c;可以通过新建根节点node&#xff0c;将原来root的右子树连到去node的左子树中&#xff0c;root的左子树连到去node的右子树中。 # Definition for a binary tree node. # class TreeNode: # def __init__(self, val0, leftNone, rightNone): …

C++-linux系统编程 3.gcc编译工具

GCC编译工具链完全指南 GCC&#xff08;GNU Compiler Collection&#xff09;是Linux系统下最常用的编译器套件&#xff0c;支持C、C、Objective-C等多种编程语言。本章将深入讲解GCC的编译流程、常用选项及项目实战技巧。 一、GCC编译的四个核心阶段 GCC编译一个程序需要经过四…

uView UI 组件大全

uView UI 是一个基于 uni-app 的高质量 UI 组件库&#xff0c;提供丰富的跨平台组件&#xff08;支持 H5、小程序、App 等&#xff09;。以下是其核心组件的分类大全及功能说明&#xff0c;结合最新版本&#xff08;1.2.10&#xff09;整理&#xff1a; &#x1f4e6; 一、基础…

QWidget 和 QML 的本质和使用上的区别

QWidget 和 QML 是 Qt 框架中两种不同的 UI 开发技术&#xff0c;它们在底层实现、设计理念和使用场景上有显著区别。以下是它们的本质和主要差异&#xff1a;1. 本质区别特性QWidgetQML (Qt Modeling Language)技术基础基于 C 的面向对象控件库基于声明式语言&#xff08;类似…

中转模型服务的风险

最近发现一些 AI 相关帖子下&#xff0c;存在低质 claude code 中转的小广告。 其中转的基本原理就是 claude code 允许自己提供 API endpoint 和 key&#xff0c;可以使用任意一个 OpenAI API 兼容的供应商&#xff0c;就这么简单。 进一点 claude token&#xff0c;再混入一点…

前端Vue.js面试题(3)

✨✨✨目录 1.v-model的原理是什么样的&#xff1f; 2.Vue的生命周期&#xff1f; 3.Vue子组件和父组件执行顺序&#xff1f; 4.created和mounted的区别&#xff1f; 5.vue中&#xff0c;推荐在哪个生命周期发起请求&#xff1f; 6.keep-alive中的生命周期有哪些&#xf…

leetcode:HJ18 识别有效的IP地址和掩码并进行分类统计[华为机考][字符串]

学习要点 bitset<8>ostringstreamstoistring.findstring.substr 题目链接 识别有效的IP地址和掩码并进行分类统计_牛客题霸_牛客网 题目描述 解法 #include <iostream> #include <bits/stdc.h> #include <sstream> #include <string> #inclu…

JavaEE Tomcat

企业开发介绍 JavaEE 规范 JavaEE规范是J2EE规范的新名称,早期被称为 J2EE 规范,其全称是 Java 2 Platform Enterprise Edition,是由 SUN 公司领导、各厂家共同制定并得到广泛认可的工业标准(JCP 组织成员)。 其中,JCP 组织(官网)的全称是 Java Community Process,…

什么是神经网络,常用的神经网络,如何训练一个神经网络

神经网络&#xff1a;是深度学习的核心技术。模仿生物神经元工作方式的计算模型&#xff0c;由大量互相连接是神经元组成&#xff0c;通过数据学习复杂的模式和关系。1、神经网络基本组成&#xff1a;神经元、层、连接神经元神经网络的最小单元。每个神经元接受输入&#xff0c…

BigFoot Decursive 2.7.28 2025.07.11

插件显示为独立插件&#xff0c;之前是团队框架自带 BigFoot Decursive lua-CSDN博客 /decursive 命令打开插件 /DCRSHOW 打开设置列表 然后优先列表里面再点【p】添加&#xff0c;你要驱散得优先职业 一键驱散lua插件下载&#xff1a; https://download.csdn.net/downloa…

可穿戴智能硬件在国家安全领域的应用

可穿戴智能硬件在国家安全领域具有广泛应用&#xff0c;涵盖军事作战、安防监控、边境巡逻等多个方面&#xff0c;以下是具体介绍&#xff1a;军事作战与训练&#xff1a;战场态势感知&#xff1a;士兵佩戴集成多种传感器的智能头盔、智能背心等&#xff0c;可实时获取战场环境…

后端接口通用返回格式与异常处理实现

前言 目前大部分系统都是前后端分离架构&#xff0c;后端提供接口并返回 JSON 数据&#xff0c;前端接收数据后进行处理展示。为了提高前后端协作效率&#xff0c;后端接口返回值采用固定格式十分必要。 后端接口返回值通用格式 通用返回值通常包含 4 个核心字段&#xff0c…

【yolo】模型训练参数解读

在YOLO&#xff08;You Only Look Once&#xff09;目标检测模型的训练过程中&#xff0c;数据增强是一项至关重要且极具“艺术性”的技术。它通过对训练图像进行一系列随机变换&#xff0c;人为地创造出更多样化的训练样本&#xff0c;从而有效提升模型的泛化能力、鲁棒性&…

IPsec:网络层的加密盾牌与HTTPS的差异解析

​​一、IPsec核心原理​​1. 安全封装结构​┌───────────────┬────────────────┬──────────────────────┐ │ IP头部 │ IPSec头部 │ 加密/认证的载荷 │ │ (路由寻址) │ (AH/ESP) │…

【Python办公】Python如何批量提取PDF中的表格

目录 专栏导读概述主要工具库介绍1. tabula-py2. camelot-py3. pdfplumber4. PyMuPDF (fitz)环境准备安装依赖Java环境配置(tabula-py需要)方法一:使用tabula-py提取表格基础用法高级配置方法二:使用camelot-py提取表格方法三:使用pdfplumber提取表格批量处理多个PDF文件数…

MySQL自定义order by排序规则

数据表create table tb_user (id bigint auto_incrementprimary key,name varchar(16) not null,age int not null,address varchar(128) null );INSERT INTO test.tb_user (id, name, age, address) VALUES (1, 张三, 18, China); INSERT INTO test.tb_…

112套开题答辩行业PPT模版

毕业答辩开题报告&#xff0c;毕业答辩&#xff0c;论文设计PPT&#xff0c;清新论文答辩PPT模版&#xff0c;毕业论文答辩开题报告PPT&#xff0c;答辩演讲通用PPT模版&#xff0c;文艺时尚毕业答辩PPT模版&#xff0c;简约毕业论文答辩PPT模版112套开题答辩行业PPT模版&#…

驱动开发系列61- Vulkan 驱动实现-SPIRV到HW指令的实现过程(2)

本节继续介绍下SPIR-V到LLVM IR的转换过程,重点分析其核心机制和关键转换步骤。我们将从 LLVM 入手,结合实SPIR-V结构逐步转换为符合 LLVM IR 语义的表示方式。 一:详细过程 1. 创建llvm::module llvm::LLVMContext llvmContext; std::unique_ptr<llvm::Mod…

集训Demo2

做一个类似原神圣遗物生成、穿戴、卸下的案例创建项目创建数据库添加圣遗物获取4个数字&#xff0c;对应圣遗物随机的四种属性构造对象添加批量删除圣遗物foreach构造数组转移圣遗物分别在items和character两个库中根据id获取对象&#xff0c;判断唯一id存在哪个数据库中在item…