导读:本期聚焦于小伙伴创作的《c#如何使用交错数组?新手入门必看的交错数组使用教程》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《c#如何使用交错数组?新手入门必看的交错数组使用教程》有用,将其分享出去将是对创作者最好的鼓励。

c#中的交错数组是一种特殊的数组类型,它的元素本身是数组,且每个子数组的长度可以不同,这和每个维度长度固定的二维数组有明显区别。交错数组适合处理每行元素数量不统一的场景,比如存储不同班级的学生成绩、不同长度的字符串集合等。

c#如何使用交错数组?新手入门必看的交错数组使用教程

交错数组的声明

交错数组的声明语法和二维数组不同,需要在类型后添加两个方括号,第一个方括号表示交错数组的长度,第二个方括号表示子数组的维度。声明时不会分配子数组的内存,需要后续单独初始化每个子数组。

声明交错数组的示例代码如下:

// 声明一个交错数组,包含3个子数组,每个子数组是一维int数组
int[][] jaggedArray;
// 也可以声明其他类型的交错数组,比如string类型的交错数组
string[][] strJaggedArray;

交错数组的初始化

交错数组的初始化分为两步,首先初始化交错数组本身的长度,再分别初始化每个子数组的长度和元素。也可以直接通过字面量的方式完成初始化,不需要单独指定每个子数组的长度。

分步初始化

先指定交错数组的长度,再逐个初始化子数组:

// 初始化交错数组,包含2个子数组
int[][] jaggedArray = new int[2][];
// 初始化第一个子数组,长度为3
jaggedArray[0] = new int[3];
// 初始化第二个子数组,长度为5
jaggedArray[1] = new int[5];
// 给子数组赋值
jaggedArray[0][0] = 1;
jaggedArray[0][1] = 2;
jaggedArray[0][2] = 3;
jaggedArray[1][0] = 4;
jaggedArray[1][1] = 5;
jaggedArray[1][2] = 6;
jaggedArray[1][3] = 7;
jaggedArray[1][4] = 8;

字面量直接初始化

如果已知所有子数组的元素,可以直接用字面量的方式初始化,编译器会自动推断每个子数组的长度:

// 直接初始化交错数组,两个子数组长度分别为3和4
int[][] jaggedArray = new int[][]
{
    new int[] {1, 2, 3},
    new int[] {4, 5, 6, 7}
};
// 也可以省略new int[][],简化写法
int[][] simpleJaggedArray =
{
    new int[] {10, 20},
    new int[] {30, 40, 50, 60},
    new int[] {70}
};

交错数组的元素访问与遍历

访问交错数组的元素需要先指定子数组的索引,再指定子数组内元素的索引,遍历交错数组需要使用嵌套循环,外层循环遍历交错数组的每个子数组,内层循环遍历每个子数组的元素。

元素访问

访问交错数组指定位置元素的示例:

int[][] jaggedArray =
{
    new int[] {1, 2, 3},
    new int[] {4, 5, 6, 7}
};
// 访问第一个子数组的第二个元素,结果为2
int value1 = jaggedArray[0][1];
// 访问第二个子数组的第四个元素,结果为7
int value2 = jaggedArray[1][3];
// 修改第一个子数组的第一个元素
jaggedArray[0][0] = 100;

遍历操作

使用嵌套for循环遍历交错数组:

int[][] jaggedArray =
{
    new int[] {1, 2, 3},
    new int[] {4, 5, 6, 7},
    new int[] {8, 9}
};
// 外层循环遍历交错数组的每个子数组
for (int i = 0; i < jaggedArray.Length; i++)
{
    Console.Write($"第{i+1}个子数组的元素:");
    // 内层循环遍历当前子数组的每个元素
    for (int j = 0; j < jaggedArray[i].Length; j++)
    {
        Console.Write(jaggedArray[i][j] + " ");
    }
    Console.WriteLine();
}

也可以使用foreach循环遍历,代码更简洁:

int[][] jaggedArray =
{
    new int[] {1, 2, 3},
    new int[] {4, 5, 6, 7},
    new int[] {8, 9}
};
int rowIndex = 0;
foreach (int[] subArray in jaggedArray)
{
    rowIndex++;
    Console.Write($"第{rowIndex}个子数组的元素:");
    foreach (int item in subArray)
    {
        Console.Write(item + " ");
    }
    Console.WriteLine();
}

交错数组与二维数组的区别

很多新手会混淆交错数组和二维数组,两者的核心区别如下:

对比项交错数组二维数组
子数组长度每个子数组长度可以不同每个维度的长度固定,所有行长度一致
声明语法类型[][] 数组名类型[,] 数组名
内存存储子数组是独立的数组对象,存储不连续整体是连续的存储块
适用场景每行元素数量不统一的场景矩阵、表格等行列长度固定的场景

交错数组的实际应用场景

交错数组在实际开发中有很多实用场景,比如:

  • 存储不同班级的学生成绩,每个班级的人数不同,用交错数组可以避免浪费内存
  • 处理不规则的表格数据,比如从文件读取的每行列数不同的数据
  • 存储不同长度的字符串集合,比如按单词长度分组存储字符串

下面是一个存储不同班级学生成绩的场景示例:

// 三个班级的人数分别为2、3、4
int[][] classScores =
{
    new int[] {90, 85},
    new int[] {88, 92, 76},
    new int[] {95, 89, 78, 82}
};
// 计算每个班级的平均分
for (int i = 0; i < classScores.Length; i++)
{
    int sum = 0;
    foreach (int score in classScores[i])
    {
        sum += score;
    }
    double avg = (double)sum / classScores[i].Length;
    Console.WriteLine($"第{i+1}个班级的平均分是:{avg:F2}");
}

注意事项

使用交错数组时需要注意以下几点:

  • 声明交错数组后,不能直接给子数组的元素赋值,必须先初始化子数组,否则会抛出NullReferenceException异常
  • 访问子数组元素时,要确保索引不超出子数组的长度范围,否则会抛出IndexOutOfRangeException异常
  • 交错数组的子数组可以是任意类型的一维数组,甚至可以是交错数组本身,实现多维不规则数组
交错数组的核心优势是灵活性,当处理的数据每行长度不一致时,优先选择交错数组可以提升内存利用率,避免二维数组固定长度带来的空间浪费。

C#_交错数组交错数组初始化交错数组遍历交错数组应用修改时间:2026-07-05 23:51:38

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。