C# 数组(Array)
变量用于存储字面量值,而数组用于存储多个字面量值。
数组是一种数据结构,它存储相同数据类型的固定数量的文本值(元素)。数组元素连续地存储在内存中。
在C#中,数组可以为三种类型:一维数组,多维数组 和 锯齿数组。在这里,您将了解一维数组。
下图说明了数组表示形式。
数组声明和初始化
可以使用方括号指定数组的元素类型来声明数组。
int[] evenNums; // 整数数组 string[] cities; // 字符串数组
以下语句在单个语句中声明并将值添加到数组中。
int[] evenNums = new int[5]{ 2, 4, 6, 8, 10 }; string[] cities = new string[3]{ "Mumbai", "London", "New York" };
在上面,evenNums 数组最多可以存储五个整数。new int[5] 方括号中的数字 5 是指定数组的大小。同样,cities 数组的大小为3。数组元素被添加到大括号 {} 中以逗号分隔的列表中。
数组类型变量可以使用 var 声明,而没有方括号 []。
var evenNums = new int[]{ 2, 4, 6, 8, 10}; var cities = new string[]{ "Mumbai", "London", "New York" };
如果要在声明时添加数组元素,则 size 是可选的。编译器将根据花括号内的元素数量推断其大小,如下所示。
int[] evenNums = { 2, 4, 6, 8, 10}; string[] cities = { "Mumbai", "London", "New York" }
下面的示例演示无效的数组声明。
//必须指定大小 int[] evenNums = new int[]; //元素数必须等于指定的大小 int[] evenNums = new int[5] { 2, 4 }; //不能将var与数组初始化程序一起使用 var evenNums = { 2, 4, 6, 8, 10};
延迟初始化
不必在单个语句中声明和初始化数组。您可以先声明一个数组,然后再使用 new 运算符对其进行初始化。
int[] evenNums; evenNums = new int[5]; // 或 evenNums = new int[]{ 2, 4, 6, 8, 10 };
访问数组元素
可以使用索引访问数组元素。索引是与每个数组元素关联的数字,从索引 0 开始 到 数组大小-1 结束。
以下示例使用索引添加/更新和检索数组元素。
int[] evenNums = new int[5]; evenNums[0] = 2; evenNums[1] = 4; //evenNums[6] = 12; //抛出运行时异常IndexOutOfRange Console.WriteLine(evenNums[0]); //输出 2 Console.WriteLine(evenNums[1]); //输出 4
请注意,尝试添加超出其指定大小的元素会抛出 IndexOutOfRangeException 异常。
使用for循环访问数组
使用for循环访问数组元素。在for循环的条件表达式中使用数组的 length 属性。
int[] evenNums = { 2, 4, 6, 8, 10 }; for(int i = 0; i < evenNums.Length; i++){ Console.WriteLine(evenNums[i]); } for(int i = 0; i < evenNums.Length; i++){ evenNums[i] = evenNums[i] + 10; // 将每个元素的值更新10 }
使用 foreach 循环访问数组
使用foreach循环读取数组元素的值而不使用索引。
int[] evenNums = { 2, 4, 6, 8, 10}; string[] cities = { "Mumbai", "London", "New York" }; foreach(var item in evenNums){ Console.WriteLine(item); } foreach(var city in cities){ Console.WriteLine(city); }
LINQ方法
C#中的所有数组均派生自抽象基类 System.Array。
Array类实现了IEnumerable接口,这样你就可以LINQ扩展方法,如 Max(),Min(),Sum(),reverse()等。
int[] nums = new int[5]{ 10, 15, 16, 8, 6 }; nums.Max(); // 返回16 nums.Min(); // 返回6 nums.Sum(); // 返回55 nums.Average(); // 返回55
System.Array 类还包括用于创建,操作,搜索和数组排序的方法。
int[] nums = new int[5]{ 10, 15, 16, 8, 6 }; Array.Sort(nums); // 排序数组 Array.Reverse(nums); // 排序数组 in descending order Array.ForEach(nums, n => Console.WriteLine(n)); // 迭代数组 Array.BinarySearch(nums, 5);// 二进制搜索
将数组作为参数传递
可以将数组作为参数传递给方法参数。数组是引用类型,因此该方法可以更改数组元素的值。
public static void Main(){ int[] nums = { 1, 2, 3, 4, 5 }; UpdateArray(nums); foreach(var item in nums) Console.WriteLine(item); } public static void UpdateArray(int[] arr) { for(int i = 0; i < arr.Length; i++) arr[i] = arr[i] + 10; }