C#-数组

数组 (array) 是一种包含若干变量的数据结构,这些变量都可以通过计算索引进行访问。数组中包含的变量(又称数组的元素)具有相同的类型,该类型称为数组的元素类型。

数组类型为引用类型,因此数组变量的声明只是为数组实例的引用留出空间。实际的数组实例在运行时使用 new 运算符动态创建。new 运算符指定新数组实例的长度 (length),它在该实例的生存期内是固定不变的。数组元素的索引范围从 0 到 Length - 1。new 运算符自动将数组的元素初始化为它们的默认值,例如将所有数值类型初始化为零,将所有引用类型初始化为 null。

下面的示例创建一个 int 元素的数组,初始化该数组,并打印该数组的内容。

csharp 复制代码
using System;

class Test
{
    static void Main()
    {
        int[] a = new int[10];
        for (int i = 0; i < a.Length; i++)
        {
            a[i] = i * i;
        }

        for (int i = 0; i < a.Length; i++)
        {
            Console.WriteLine("a[{0}] = {1}", i, a[i]);
        }
    }
}

此示例创建并操作一个一维数组 (single-dimensional array)。C# 还支持多维数组 (multi-dimensional array)。数组类型的维数也称为数组类型的秩 (rank),它是数组类型的方括号之间的逗号个数加 1。下面的示例分别分配一个一维数组、一个二维数组和一个三维数组。

csharp 复制代码
int[] a1 = new int[10];
int[,] a2 = new int[10, 5];
int[,,] a3 = new int[10, 5, 2];

a1 数组包含 10 个元素,a2 数组包含 50 (10 × 5) 个元素,a3 数组包含 100 (10 × 5 × 2) 个元素。

数组的元素类型可以是任意类型,包括数组类型。对于数组元素的类型为数组的情况,我们有时称之为交错数组 (jagged array),原因是元素数组的长度不必全都相同。下面的示例分配一个由 int 数组组成的数组:

csharp 复制代码
int[][] a = new int[3][];
a[0] = new int[10];
a[1] = new int[5];
a[2] = new int[20];

第一行创建一个具有三个元素的数组,每个元素的类型为 int\[\] 并具有初始值 null。接下来的代码行使用对不同长度的数组实例的引用分别初始化这三个元素。

new 运算符允许使用数组初始值设定项 (array initializer) 指定数组元素的初始值,数组初始值设定项是在一个位于定界符 { 和 } 之间的表达式列表。下面的示例分配并初始化具有三个元素的 int\[\]。

csharp 复制代码
int[] a = new int[] {1, 2, 3};

注意数组的长度是从 { 和 } 之间的表达式个数推断出来的。对于局部变量和字段声明,可以进一步简写,从而不必再次声明数组类型。

csharp 复制代码
int[] a = {1, 2, 3};

前面的两个示例都等效于下面的示例:

csharp 复制代码
int[] t = new int[3];
t[0] = 1;
t[1] = 2;
t[2] = 3;
int[] a = t;
相关推荐
魔力女仆8 小时前
分享一个 JS 鼠标跟随贪吃蛇背景库
开发语言·javascript·计算机外设
2401_894915539 小时前
GEO 搜索优化完整源码从零部署:环境配置、集群搭建全流程
开发语言·python·tcp/ip·算法·unity
麻瓜老宋10 小时前
AI开发C语言应用按步走,表达式计算器calc的第二十二步,分号赋值链式修复、TOKEN_ASSIGN
c语言·开发语言·atomcode
颜x小12 小时前
[C#] C++与c#语法对比
开发语言·c++·c#
weixin_4236521312 小时前
C#使用JObject
开发语言·c#
国科安芯12 小时前
FreeRTOS RISC-V 浮点上下文切换移植:在 IAR 工程中完整保存 FPU 寄存器
java·开发语言·单片机·嵌入式硬件·算法·系统架构·risc-v
小poop12 小时前
轮转数组:从暴力到最优,一题掌握算法复杂度分析
数据结构·算法·leetcode
Z59981784113 小时前
c#软件开发学习笔记--Modbus-RTU通讯
笔记·学习·c#
霸道流氓气质13 小时前
Java中集成Smile 技术教程:从入门到工程实践
java·开发语言
BerrySen17814 小时前
迈向 Next-Gen Java:企业级高并发架构演进与大模型 Agent 落地深度实战
java·开发语言·架构