声明和使用多维和交错数组

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

介绍

数组可用于将项目存储在连续的内存位置。但如果我们需要以行和列的形式存储项目,该怎么办?嗯,这就是多维数组发挥作用的地方。

多维数组

数组声明

声明多维数组的一般语法是:

      type [,,...] arrayName = new type [n1,n2,...];
    

这里,type 是数组的数据类型,arrayName 是数组的名称,n1,n2 是维度。

最常见的多维数组类型是二维数组。

      int [,] myArray = new int [6, 3];
    

类似地,我们可以声明一个三维数组。

      int [,,] myArray = new int [3, 3, 3];
    

数组初始化

我们可以按如下方式初始化多维数组:

      string [,] tasks = new string [3,2] {
            { "Task00", "Task01" },
            { "Task10", "Task11" },
            { "Task20", "Task21" }
        };
    
      int [,,] nums = new int [3, 2, 2] {
            { { 1, 2 }, { 3, 4 } },
            { { 5, 6 }, { 7, 8 } },
            { { 9, 10 }, { 11, 12 } },
        };
    

我们还可以初始化一个数组而不指定其维度。

      int[,] myArray = {
            { 3, 4 },
            { 5, 6 }
        };
    

要访问多维数组的元素,我们可以按如下方式指定索引值:

      myArray[1,2];
    

多维数组也称为矩形数组。您很可能会在程序中使用二维数组,或者,如果您正在使用需要 3D 对象的建模软件,则可能还需要三维数组,但您不太可能使用超过 3 维的数组。

我们来看一个例子,我们需要存储五个位置的坐标。

我们可以将坐标存储在数组中,如下所示:

      int [,] coords = new int [5, 2] {
            { 43, 29 },
            { 48, 12 },
            { 145, 54 },
            { 123, 612 },
            { 12, 78 }
        };
    

我们还可以使用简写语法进行初始化。

      int [,] coords = {
            { 43, 29 },
            { 48, 12 },
            { 145, 54 },
            { 123, 612 },
            { 12, 78 }
        };
    

例子

要访问所有坐标,我们必须循环遍历数组。查看完整代码。

      using System;

namespace multidarray
{
    class Program
    {
        static void Main(string[] args)
        {
            int [,] coords = {
                { 43, 29 },
                { 48, 12 },
                { 145, 54 },
                { 123, 612 },
                { 12, 78 }
            };

            for (int i = 0; i < 5; i++) {
                for (int j = 0; j < 2; j++) {
                    Console.Write(coords[i,j] + " ");
                }
                Console.WriteLine();
            }
        }
    }
}
    

结果:

      43 29
48 12
145 54
123 612
12 78
    

让我们让它更有趣。考虑一下:我们必须在地图上画出连接坐标的线,为此我们需要一个三维数组来存储一对坐标。

      using System;

namespace multidarray
{
    class Program
    {
        static void Main(string[] args)
        {
            int [,,] lines = {
                { { 43, 29 }, { 34, 67 } },
                { { 56, 95 }, { 48, 12 } },
                { { 145, 54 }, { 26, 69 } },
                { { 56, 21 }, { 123, 612 } },
                { { 12, 78 }, { 111, 37 } }
            };

            for(int i = 0; i < 5; i++) {
                for (int j = 0; j < 2; j++) {
                    for (int k = 0; k < 2; k++)
                        Console.Write(lines[i,j,k] + " ");
                    Console.Write("\t");
                }
                Console.WriteLine();
            }
        }
    }
}
    

结果:

      43 29   34 67
56 95   48 12
145 54  26 69
56 21   123 612
12 78   111 37
    

当我们知道每个元素的长度时,多维数组非常有用。例如,在前面的例子中,我们知道每个坐标的长度为 2。但如果我们需要存储可变长度的元素,该怎么办?别担心,C# 也能帮你解决这个问题。

锯齿状阵列

C# 允许我们在另一个称为交错数组的数组中跟踪数组。交错数组的每个元素都是一个可以具有不同长度的数组。

交错数组声明

要声明锯齿数组,我们需要指定数据类型,后跟两个方括号。

      type [][] arrayName = new type [n][];
    

这里,type 是数组的数据类型,arrayName 是数组的名称,n 是交错数组的长度。请注意,我们不能在第二组括号中指定另一个维度,编译器对此不满意。

这里发生的情况是,锯齿数组引用一维数组,并且该数组中的每个元素都引用其他数组。

让我们看一个例子,

      int [][] shoppingCarts = new int [3][];
shoppingCarts[0] = new int [] { 1, 2, 3, 4 };
shoppingCarts[1] = new int [] { 45, 65, 12, 45, 56, 78 };
shoppingCarts[2] = new int [] { 52, 74, 10, 98, 12 };
    

shoppingCarts 锯齿状数组存储了三个用户的购物车,其中包含购物车中商品的商品编号。每个购物车的长度都是可变的,并且彼此独立。

交错数组初始化

还有一种简写版本用于声明和初始化锯齿数组。

      int [][] shoppingCarts = {
        new int [] { 1, 2, 3, 4 },
        new int [] { 45, 65, 12, 45, 56, 78 },
        new int [] { 52, 74, 10, 98, 12 }
    };
    

交错数组示例

访问锯齿数组元素的完整程序。

      using System;

namespace jaggedarray
{
    class Program
    {
        static void Main(string[] args)
        {
            int [][] shoppingCarts = {
                new int [] { 1, 2, 3, 4 },
                new int [] { 45, 65, 12, 45, 56, 78 },
                new int [] { 52, 74, 10, 98, 12 }
            };

            for (int i = 0; i < shoppingCarts.Length; i++) {
                for (int j = 0; j < shoppingCarts[i].Length; j++) {
                    Console.Write(shoppingCarts[i][j] + " ");
                }
                Console.WriteLine();
            }
        }
    }
}
    

结果:

      1 2 3 4
45 65 12 45 56 78
52 74 10 98 12
    

结论

我希望你今天能学到一些新东西,继续努力编码。干杯。

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