C#入门系列 -- 多维数组
【摘要】 定义和初始化C#中允许定义多维数组,多维数组的每个元素又是一个数组,称为子数组。C#中多维数组有两种类型:矩形数组和交错数组。矩形数组是某个维度的所有子数组有相同长度的多维数组,并且不管该矩形数组有多少维度,总是使用一组方括号进行所有维度描述。交错数组是每个子数组都是独立数组的多维度数组,子数组长度可以具有不同的长度,并且数组的每个维度使用一组方括号来描述。一般定义形式如下:元素类型[,,...
定义和初始化
C#中允许定义多维数组,多维数组的每个元素又是一个数组,称为子数组。
C#中多维数组有两种类型:矩形数组和交错数组。
矩形数组是某个维度的所有子数组有相同长度的多维数组,并且不管该矩形数组有多少维度,总是使用一组方括号进行所有维度描述。
交错数组是每个子数组都是独立数组的多维度数组,子数组长度可以具有不同的长度,并且数组的每个维度使用一组方括号来描述。
一般定义形式如下:
元素类型[,,…,] 数组名称 = new 元素类型[第一维数组长度,第二维数组长度,…,第N维数组长度];
或者定义和初始化分开
元素类型[,,…,] 数组名称:
数组名称 = new 元素类型[第一维数组长度,第二维数组长度,…,第N维数组长度];
使用实例:
int[,]A= new int[3,3];
int[,,]B;
B = new int [2,3,4];
多维数组的定义说明:
- 多维数组声明中方括号内的逗号是秩说明符,秩就是逗号数量加1。
- 多维数组声明时,原则上可以使用任意多的秩说明符,即C#支持任意多维的数组。
- 多维数组的秩作为数组类型的一部分,而维度长度不是类型的一部分。
- 多维数组一旦声明,其维度数就被固定。维度长度在创建数组时才需要被确定。
多维数组初始化注意事项:
- 初始值必须按照多维数组的维度和每一维的长度使用大括号进行封闭,并且每个初始值向量必须有逗号分隔,且每个初始值向量里的初始值之间也要使用逗号分隔;
- 维度长度是可选的,因为编译器可以通过初始值的个数来推算出长度,但是表示数组秩的逗号不能省略。
例如:
int[,] arr = new int[,]{{1,2,3},{4,5,6},{7,8,9}};
还可以更简单,比如这样:
int[,] arr = {{1,2,3},{4,5,6},{7,8,9}};
多维数组的引用
矩形数组只能逐个引用数组元素的值,不能一次性引用整个数组。
数组元素引用是通过下标得到的,一般形式为:
数组名[下标表达式1,下标表达式2,…,下标表达式N]
arr[1,2,...,n]
两种方式遍历二维数组:
class Program
{
static void Main(string[] args)
{
int[,] arr = new int[,] { { 1, 2 }, { 3, 4 } };
// 遍历行
for (int i = 0; i < arr.GetLength(0); i++)
{
// 遍历列
for (int j = 0; j < arr.GetLength(1); j++)
{
Console.WriteLine(arr[i,j]);
}
}
// foreach遍历
foreach (var item in arr)
{
Console.WriteLine(item);
}
Console.ReadLine();
}
}
交错数组
上面介绍的数组所有子数组都是等长的,也称之为矩形数组,与矩形数组不同,交错数组的子数组可以有不同数目的元素。
一般情况下,交错数组的声明和创建是分层进行的。
元素类型[][] 数组名称 = new 元素类型[顶层数组大小][];
数组名称[0] = new 元素类型[第一个子数组的大小];
数组名称[1] = new 元素类型[第二个子数组的大小];
数组名称[2] = new 元素类型[第三个子数组的大小];
// 代码示例
int[][]Arr = new int[3][];
Arr[0] = new int[] { 1, 2, 3 };
Arr[1] = new int[] { 4, 5, 6, 7 };
Arr[2] = new int[] { 8, 8 };
交错数组的遍历
class Program
{
static void Main(string[] args)
{
int[][]Arr = new int[3][];
Arr[0] = new int[] { 1, 2, 3 };
Arr[1] = new int[] { 4, 5, 6, 7 };
Arr[2] = new int[] { 8, 8 };
// 取维度长度
for (int i = 0; i < Arr.GetLength(0); i++)
{
// 注意是这里是Arr[i].GetLength(0),
for (int j = 0; j < Arr[i].GetLength(0); j++)
{
Console.WriteLine(Arr[i][j]);
}
}
// foreach遍历
foreach (var item in Arr)
{
Console.WriteLine(item);
// 输出System.Int32[],取不到具体值
}
Console.ReadLine();
}
}
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)