多维和交错数组

发布日期:2026-07-14 19:43:03   来源 : 杭州电子商务研究院    浏览量 :16
杭州电子商务研究院 发布日期:2026-07-14 19:43:03  
16

介绍

多维数组是一维数组的扩展形式,常用于存储数学计算、图像处理和记录管理的数据。例如,普通的棋盘有 8 行 8 列,可以使用大小为 8 x 8 的多维数组轻松表示(8 行,每行可存储 8 个元素)。本指南详细介绍了多维数组的变体及其在 C# 中的应用。

数组是线性形式的同类数据的集合,称为一维数组。换句话说,一维数组是一行相似的数据。

      char[] one_d_array = {'A', 'B', 'C', 'D'};
    

一维数组只能存储一系列数据,例如

  • 卷号系列
  • 无线电信道频率系列
  • 每日销售单位数

通常,您需要处理以矩阵或表形式存储的复杂数据:

  • 图像的像素矩阵
  • 计算机图形变换矩阵
  • 图论中邻接矩阵,表示节点的连通性(Dijkstra邻接矩阵

在上面的例子中,表中的每个数据行都可以映射到一维数组中。

矩阵中的数据也可以以类似的方式存储。

如上图所示,可以通过创建一个数组类型容器(数组的数组)来简化这一过程,该容器将保留其他一维数组(称为多维数组)的引用。

      string[,] stuTable = new string[,]{
     { "Tom"  , "35", "USA" },
     { "Sam"  , "38", "Australia" },
     { "Henry", "40", "England" } };
    

要求:遵循深入研究数组基础指南,该指南彻底解释一维数组和相关概念。

多维数组

多维数组是一维数组的集合,可以表示关系表和矩阵。矩阵和表都可以看作是行的集合,可以映射到行数组(一维数组)。多维数组按行主序存储值,这意味着所有行的元素都以连续(一行接一行)的方式存储。多维数组的一个实际示例是商店每月每周每天售出的总单位数。

      int[,] sales = new int[,]{
     {10, 20, 12, 15, 15, 27, 35},
     {9, 14, 17, 19, 10, 22, 39}
     //... so on };
    

多维数组也称为矩形数组,因为每行的大小始终相同。以销售数组为例,其大小为7,任何更改大小的尝试都会导致错误。

多维声明和初始化

  • 声明:多维数组以逗号分隔的语法声明以表示多维。
      int [,] arr;
    
  • 初始化:可以使用初始化语法在声明数组时提供值。
      int [,] arrIni = {
   {11, 2, 3},{14, 29, 37} };
    
  • 有界初始化语法:多维数组的大小可以有界,这意味着只能提供定义数量的一维数组作为值。在此示例中,sales数组只能有两行条目。
      int [,] arrBoundedIni = new int[2,3]{ // 2 is the number of rows and 3 is the size of each row
     {11, 2, 3},
     {14, 29, 37} };
    

初始化器和有界语法也可以组合成如下形式:

      int [,] arrMixSyx = new int[2,3]{ // defined number of rows are 2
     {11, 2, 3},
     {14, 29, 37}
};

//or

int [,] arrMixSyx = new int[,]{
     {11, 2, 3},
     {14, 29, 37} };
    

您可以使用var作为占位符。初始化器和有界语法可以组合如下:

      var arrBoundedIni = new int[2,3]...
var arrMixSyx = new int[,]...
    

内存分配

多维数组以线性方式存储为一个长数组。在内存中,只有一个数组,该数组在逻辑上被分成多个大小相同的维度(等于行数)。LengthRank属性可用于验证差异,如下所示:

  • 长度:它将返回数组中元素的数量。
      int[] arr = {1,2,4};
int[,] mulArr = new int[2,3];
Console.WriteLine("Length of arr : {0}", arr.Length); // output: 3
Console.WriteLine("Length of armulArrrMul : {0}", mulArr.Length); // output: 6
    

mulArr的输出是 6,即:number_of_rows * number_of_elements 即 2 * 3 = 6

  • 等级:它将返回数组的维数。
      Console.WriteLine("Rank of arr : {0}", arr.Rank); // output: 1
Console.WriteLine("Rank of armulArrrMul : {0}", mulArr.Rank); // output: 2
Console.WriteLine("Rank of array : {0}", new string[2,3,3].Rank); // output: 3
// [2,3,3] = 2 rows(arrays) of 3 arrays, each having 3 elements
    

注意:C# 提供了一种创建具有不同行大小的多维数组的方法,称为交错数组。与多维数组不同,交错数组由多个一维数组组成,这意味着交错数组的 Rank 属性将始终返回 1。

数组访问

多维数组的项目以矩阵形式表示,可以通过行和列的索引值简单地访问。

      // 0 = Section A
// 1 = Section B
string [,] sections = new string[2,3];
sections[0,0] = "Tony";
sections[0,1] = "Samy";
sections[0,2] = "Jane";
sections[1,0] = "Jack";
sections[1,1] = "Hans";
sections[1,2] = "Fred";
    

循环也可用于遍历数组:

      for(int row = 0; row< sections.GetLength(0); row++){
   for (int col = 0; col < sections.GetLength(1); col++)
   {
       char grade = (row == 0) ? 'A' : 'B';
       Console.WriteLine("{0} scored grade {1}",sections[row,col],grade); // demo output: Tony scored grade A
     }
}
    
  • GetLength:它将返回特定索引处的数组的大小。

foreach提供了一种访问所有值的便捷方法:

      foreach (string student in sections)
{
       Console.WriteLine("{0}",student);
}
    

交错数组

交错数组可以包含对其他数组的引用,并且其他数组的大小可以不同。交错数组的元素是数组引用,而多维数组只能存储元素和维度(只是逻辑实体)。考虑一个竞赛中的团队示例,其中团队成员的数量可能有所不同:

      string[][] enteries = new string[3][]{
    new string[] {"TeamCS", "Dennis", "James", "Guido", "Linus"},
    new string[] {"TeamMath", "Ramanujan", "Hardy"},
    new string[] {"TeamSc", "Albert", "Tesla", "Newton"},
};
    

这是具有现有数据的示例。可以声明交错数组,并稍后初始化内部数组:

      string[][] enteries = new string[3][];
enteries[0] = new string[4]; // inner array initialization
enteries[1] = new string[2];
enteries[2] = new string[3];
enteries[0][0] = "TeamCS"; // data can be added later
enteries[1][1] = "Ramanujan";
enteries[2][2] = "Tesla";
    

内部数组引用需要在执行任何访问操作之前使用new运算符进行初始化,因为默认情况下,内部数组被初始化为 null。因此,任何存储数据的尝试都会导致 NullReferenceException,从而导致应用程序崩溃。

访问交错数组

在交错数组中,可以像这样检索和访问内部数组引用:

<div class="c
以上内容来自杭州电子商务研究院推送
关注
关于我们
热门推荐
合作伙伴
免责声明:本站部分资讯来源于网络,如有侵权请及时联系客服,我们将尽快处理
Copyright © 2025-2027 ToB产业网址导航 公安备案 浙公网安备33010602013138号 浙ICP备16025413号-9
支持 反馈 关注 数据