C# 数组C# 多维数组
原文C# 数组_w3cschool
请勿将文章标记为付费!!!!!
C#数组
数组表示特定类型的固定数量的变量。
在元素类型后面创建一个带方括号的数组。
例如:
char[] letterArray = new char[5]; // Declare an array of 5 characters
在元素类型后面创建一个带方括号的数组。
letterArray[0] = 'a';
letterArray[1] = 'e';
letterArray[2] = 'i';
letterArray[3] = 'o';
letterArray[4] = 'u';
Console.WriteLine (letterArray[1]); // e
我们可以使用for循环语句来遍历数组中的每个元素。
for (int i = 0; i < letterArray.Length; i++) {Console.Write (letterArray[i]); // aeiou
}
数组的Length
属性返回数组中元素的数量。
创建数组后,无法更改其长度。
数组初始化表达式可以在一个步骤中声明和填充数组:
char[] letterArray = new char[] {'a','e','i','o','u'};
或简单为:
char[] letterArray = {'a','e','i','o','u'};
所有数组都继承自System.Array
类,为所有数组提供通用服务。
默认元素初始化
创建数组总是使用默认值预先初始化元素。
例如,考虑创建一个整数数组。因为int是一个值类型,所以分配1000个整数。
每个元素的默认值为0:
int[] a = new int[1000];
Console.Write (a[123]); // 0
值类型与引用类型
当元素类型是值类型时,每个元素值将作为数组的一部分分配。
例如:
struct Point { public int X, Y;
} Point[] a = new Point[1000];
int x = a[500].X; // 0
如果Point
是一个类,创建数组将只分配10个空引用:
class Point { public int X, Y;
} Point[] a = new Point[10];
int x = a[5].X; // Runtime error, NullReferenceException
要避免此错误,请在实例化数组后显式实例化Point
值:
Point[] a = new Point[10];
for (int i = 0; i < a.Length; i++){ // Iterate i from 0 to 9a[i] = new Point(); // Set array element i with new point
}
数组本身始终是引用类型对象,不管元素类型如何。
例如,以下是合法的:
int[] myArray = null;
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 []