扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
数组是具有相同数据类型的项的有序集合,通过数组名以及所期望的项相对于数组开始位置的偏移量可以访问数组。与 Java 相比,在 C# 中声明和使用数组的方式有一些重要的不同,我将在这一部分中对此进行介绍。
一维数组以线性方式存储了固定数目的项,它仅仅需要一个索引值就可以确定任何一项。
在 C# 中,数组声明中的方括号必须紧跟数据类型,而不可以像在 Java 中一样出现在变量名的后面。因此,可以使用下面的语法来声明整数类型的数组:
int[] MyArray;
而下面的声明在 C# 中是无效的:
int MyArray[];
一旦声明了数组,就可以使用新的关键字来设置它的大小,这与 Java 中是完全一样的:
int[] MyArray; // declares the array reference MyArray = new int[5]; // creates a 5 element integer array
然后,我们就可以使用与 Java 完全相同的语法来访问一维数组中的元素,注意 C# 数组的索引也是从零开始的:
MyArray [4] // accesses the last element in the array
可以使用与 Java 相同的语法在创建时对数组元素进行初始化:
MyArray = new int[5] {1, 2, 3, 4, 5};
与 Java 不同,初始化器的数目必须与数组大小完全匹配。 我们可以利用这一特性在一行中声明和初始化 C# 数组:
int[] TaxRates = {0, 20, 23, 40, 50};
此语法创建了一个大小与初始化器的数目相等的数组。
C# 中初始化数组的另一种方法就是使用 foreach 循环。下面的循环将数组中的每个元素都设置为零:
int[] MyLittleArray = new int[5]; foreach (int i in MyLittleArray) { MyLittleArray[i] = 0; }
C# 和 Java 都支持创建交错或者说非矩形的数组,其中的每一行都包含不同数目的列。例如,下面的交错数组的第一行有四项,而第二行有三项:
int[][] JaggedArray = new int[2][]; JaggedArray[0] = new int[4]; JaggedArray[1] = new int[3];
C# 允许我们创建规则的多维数组,它可以看作是相同类型的值的矩阵。虽然 Java 和 C# 都支持交错的数组,但是 C# 还支持多维数组或数组的数组。我们将马上介绍交错数组。
使用下面的语法,我们可以声明一个多维矩形数组:
int[,] My2DIntArray; float[,,,] My4DFloatArray;
其中,My2DintArray 是可以借此访问每个元素的名称。
注意, int[][] My2DintArray; 行在 C# 中有不同的含义,我们很快就会明白这一点。
一旦声明了数组,我们就可以这样给它分配内存:
int[,] My2DIntArray; // declares array reference My2DIntArray = new int[5,4]; // allocates space for 5x4 integers
然后,可以使用下面的语法来访问数组的元素:
My2DIntArray [4,3] = 906;
因为数组是从零开始的,所以这将第四行第五列中的元素(右下角)设置为 906。
通过下面的任何一种方法,都可以在一行中创建、设置和初始化多维数组:
int[,] intArray = { {1,2,3}, {4,5,6} }; int[,] intArray = new int [2,3] { {1,2,3}, {4,5,6} }; int[,] intArray = new int [,] { {1,2,3}, {4,5,6} };
数组中所有的元素都可以使用嵌套的循环进行初始化,如下所示:
int[,] intArray = new int[5,4]; foreach (int i in intArray) { foreach (int j in intArray[]) { j = 0; } }
在 .NET 中,数组是作为 System.Array 类的实例实现的。此类提供了几个有用的方法,例如 Sort() 和 Reverse()。
下面的程序说明了使用这几个方法是多么的容易。首先,我们使用 Array 类的 Reverse() 方法来使数组的元素反向,然后,我们使用 Sort() 方法对它们进行排序:
using System; public class ArrayMethods { public static void Main() { // Create string array of size 5 string[] EmployeeNames = new string[5]; Console.WriteLine("Enter five employee names:"); // Read 5 employee names from user for(int i=0;i<5;i++) { EmployeeNames[i]= Console.ReadLine(); } // Print the array in original order Console.WriteLine("\n** Original Array **"); foreach(string EmployeeName in EmployeeNames) { Console.Write("{0} ", EmployeeName); } //print the array in reverse order. Console.WriteLine("\n\n** Values in Reverse Order **"); System.Array.Reverse(EmployeeNames); foreach(string EmployeeName in EmployeeNames) { Console.Write("{0} ", EmployeeName); } //print the array in sorted order. Console.WriteLine("\n\n** Values in Sorted Order **"); System.Array.Sort(EmployeeNames); foreach(string EmployeeName in EmployeeNames) { Console.Write("{0} ", EmployeeName); } } }
下面是此程序的一些典型输出:
Enter five employee names: Luca Angie Brian Kent Beatriz ** Original Array ** Luca Angie Brian Kent Beatriz ** Values in Reverse Order ** Beatriz Kent Brian Angie Luca ** Values in Sorted Order ** Angie Beatriz Brian Kent Luca查看本文来源
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者