变量用于存储字面量值,而数组用于存储多个字面量值。
数组是一种数据结构,它存储相同数据类型的固定数量的文本值(元素)。数组元素连续地存储在内存中。
在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 的数组声明
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 属性。
示例:使用for循环访问数组元素
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循环读取数组元素的值而不使用索引。
示例:使用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()等。
示例:LINQ方法
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;
}