C#三学教程 - 多维数组

C#多维数组

多维数组有两种类型:矩形和锯齿。

矩形阵列表示存储器的n维块,锯齿形阵列是阵列阵列。

矩形数组

使用逗号分隔每个维度来声明矩形数组。

以下声明一个矩形二维数组,其中维度为3乘3:


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

数组的 GetLength 方法返回从0开始的给定维度的长度:


for (int i = 0; i < matrix.GetLength(0); i++) {
    for (int j = 0; j < matrix.GetLength(1); j++) {
        matrix[i,j] = i * 3 + j; 
    }
}

矩形数组可以初始化如下:


int[,] matrix = new int[,] { 
                        {0,1,2}, 
                        {3,4,5}, 
                        {6,7,8} 
                        }; 

锯齿数组

锯齿数组使用连续的方括号来表示每个维度。

这里是一个声明一个锯齿状的二维数组的例子,其中最外面的维度是3:


int[][] matrix = new int[3][]; 

内部尺寸未在声明中指定,每个内部数组可以是任意长度。

每个内部数组都隐式初始化为null,而不是一个空数组。

每个内部数组必须手动创建:


for (int i = 0; i < matrix.Length; i++) { 
    matrix[i] = new int[3]; // Create inner array     for (int j = 0; j < matrix[i].Length; j++)
        matrix[i][j] = i * 3 + j; 
    } 
}

锯齿数组可以初始化如下:


int[][] matrix = new int[][] { 
        new int[] {0,1,2}, 
        new int[] {3,4,5}, 
        new int[] {6,7,8,9} 
}; 

数组初始化

有两种方法可以缩短数组初始化表达式。

第一个是省略new运算符和类型限定:


char[] vowels = {"a","e","i","o","u"}; 
int[,] rectangularMatrix = { 
    {0,1,2}, 
    {3,4,5}, 
    {6,7,8} 
}; 

int[][] jaggedMatrix = { 
    new int[] {0,1,2}, 
    new int[] {3,4,5,2,2,2,2}, 
    new int[] {6,7,8} 
}; 

第二种方法是使用var关键字,它告诉编译器隐式地键入一个局部变量:


var i = 3; // i is implicitly of type int var s = "asdf"; // s is implicitly of type string 
var rectMatrix = new int[,]{ 
    {0,1,2}, 
    {3,4,5}, 
    {6,7,8} 
}; 

var jaggedMatrix = new int[][]{
     new int[] {0,1,2},
     new int[] {3,4,5},
     new int[] {6,7,8} 
}; 

我们可以省略new关键字后的类型限定符,并让编译器推断数组类型:

var letters = new [] {'a','e','i','o','u'}; //编译器推断char []

发表评论

© 2022 狸玖技术站 - 基于 WordPress