写点什么

C#入门系列 (十一) -- 多维数组

作者:陈言必行
  • 2022 年 6 月 11 日
  • 本文字数:1520 字

    阅读完需:约 5 分钟

定义和初始化 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(); }}
复制代码


发布于: 刚刚阅读数: 4
用户头像

陈言必行

关注

公号:开发同学留步 2019.03.12 加入

我是一个从事Unity游戏开发攻城狮,6年开发经验,助你日常不加班。

评论

发布
暂无评论
C#入门系列(十一) -- 多维数组_C#_陈言必行_InfoQ写作社区