声明和使用多维和交错数组
介绍
数组可用于将项目存储在连续的内存位置。但如果我们需要以行和列的形式存储项目,该怎么办?嗯,这就是多维数组发挥作用的地方。
多维数组
数组声明
声明多维数组的一般语法是:
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
结论
我希望你今天能学到一些新东西,继续努力编码。干杯。
免责声明:本内容来源于第三方作者授权、网友推荐或互联网整理,旨在为广大用户提供学习与参考之用。所有文本和图片版权归原创网站或作者本人所有,其观点并不代表本站立场。如有任何版权侵犯或转载不当之情况,请与我们取得联系,我们将尽快进行相关处理与修改。感谢您的理解与支持!
请先 登录后发表评论 ~