数组
数组基础
什么是数组
数组是一种用于存储一组相同类型元素的数据结构,类似于一组连续的内存位置,每个位置存储一个数组元素。
数组具有以下特点:
- 元素类型相同: 数组中的所有元素必须是同一类型的数据,例如 int、string、double 等。
- 固定大小: 数组的大小在声明时确定,一旦创建就不能改变。
- 按索引访问: 数组中的元素可以通过索引访问,索引从 0 开始。
C# 中的数组是一种数据结构,用于存储固定大小的相同类型元素的集合。数组的索引是从 0 开始的,这意味着数组中第一个元素的索引是 0,第二个元素的索引是 1,依此类推。
声明数组
我们可以通过指定类型后跟方括号 []
来声明一个数组。数组的声明不会创建数组实例或分配任何内存。它只是定义了一个数组变量,之后你需要通过初始化来创建数组的实例。
int[] myArray;
初始化数组
数组的初始化是通过使用 new
关键字来创建数组的实例,并分配内存空间。在初始化时,你需要指定数组的大小。
myArray = new int[5]; // 创建一个包含5个整数的数组
你也可以在声明的同时初始化数组:
int[] myArray = new int[5]; // 声明并初始化数组
或者使用数组初始化器,同时声明、初始化数组,并给数组元素赋值:
int[] myArray = { 1, 2, 3, 4, 5 }; // 声明、初始化数组并提供初始值
数组的赋值
一旦数组被初始化,你可以通过索引来给数组的元素赋值:
myArray[0] = 10; // 将数组的第一个元素设置为10
访问数组元素
访问数组元素也是通过索引来完成的:
int firstElement = myArray[0]; // 读取数组的第一个元素
示例
using System;
class Program
{
static void Main()
{
// 声明并初始化数组
int[] numbers = { 2, 4, 6, 8, 10 };
// 修改数组的第三个元素
numbers[2] = 12;
// 访问并打印数组的每个元素
for (int i = 0; i < numbers.Length; i++)
{
Console.WriteLine(numbers[i]);
}
// 或者使用 foreach
foreach (int num in numbers)
{
Console.WriteLine(num);
}
}
}
多维数组
多维数组是指可以在一个数组中存储多个维度的数据。C# 支持两种类型的多维数组:矩形数组和交错数组。
矩形数组
矩形数组(Rectangular Arrays)指的是行和列都固定的多维数组。它可以是二维的、三维的或者更多维度的。矩形数组的声明方式是在数组类型后面使用逗号来分隔每个维度。
// 声明一个 2x3 的矩形数组
int[,] rectangularArray = new int[2, 3];
// 使用初始化器
int[,] rectangularArrayWithValues = { { 1, 2, 3 }, { 4, 5, 6 } };
交错数组
交错数组(Jagged Arrays)是数组的数组。每个元素都是一个一维数组,这些一维数组的长度可以不同。交错数组的声明方式是在数组类型后面使用一对方括号 []
,每对方括号代表一个维度。
// 声明一个交错数组
int[][] jaggedArray = new int[2][];
// 初始化
jaggedArray[0] = new int[3] { 1, 2, 3 }; // 第一个数组有 3 个元素
jaggedArray[1] = new int[2] { 4, 5 }; // 第二个数组有 2 个元素
传递数组给函数
在 C# 中,数组是引用类型。当你将数组作为参数传递给函数时,实际上传递的是数组的引用。这意味着在函数内部对数组元素所做的任何修改都会反映到原始数组上。
void ModifyArray(int[] arr)
{
arr[0] = 10; // 修改会影响原始数组
}
参数数组
参数数组(Param Arrays)允许你在方法声明中指定一个参数,该参数接受任意数量的参数(或者一个数组)。使用 params
关键字来定义参数数组。
void PrintNumbers(params int[] numbers)
{
foreach (int i in numbers)
{
Console.WriteLine(i);
}
}
// 可以这样调用
PrintNumbers(1, 2, 3, 4);
注意:
params
关键字只能用于方法的最后一个参数。- 在方法内部,参数数组表现为一个正常的数组,你可以使用索引访问它的元素,或者使用循环遍历它。
- 如果有其他参数,参数数组必须放在参数列表的最后,并且在调用方法时,必须先指定其他参数,然后再指定参数数组中的参数。
- 你也可以不传递任何参数给参数数组,此时它将是一个长度为 0 的数组。
Array 类
Array
类是 C# 中所有数组的基类,提供了各种用于创建、操作、搜索和排序数组的方法。
创建数组
虽然通常使用数组类型的构造器直接创建数组,Array
类也提供了 CreateInstance
方法来动态创建数组。
// 创建一个长度为5的整数数组
Array myArray = Array.CreateInstance(typeof(int), 5);
获取和设置元素
你可以使用 GetValue
和 SetValue
方法来获取和设置数组中的元素。
myArray.SetValue(10, 0); // 将索引0处的元素设置为10
int value = (int)myArray.GetValue(0); // 获取索引0处的元素
长度和维度
Length
属性返回数组中元素的总数,Rank
属性返回数组的维度(即数组是一维的、二维的还是多维的)。
int length = myArray.Length; // 获取数组长度
int rank = myArray.Rank; // 获取数组维度
排序和搜索
Array
类提供了 Sort
和 BinarySearch
方法来对数组进行排序和搜索。
int[] numbers = { 3, 1, 4, 1, 5, 9, 2, 6 };
Array.Sort(numbers); // 对数组进行排序
int index = Array.BinarySearch(numbers, 4); // 在数组中搜索元素4
复制数组
Copy
, CopyTo
, 和 Clone
方法允许你复制数组。
int[] copy = new int[10];
Array.Copy(numbers, copy, numbers.Length); // 将numbers数组复制到copy数组
int[] clone = (int[])numbers.Clone(); // 克隆numbers数组
清除数组元素
Clear
方法用于将一系列元素设置为数组元素类型的默认值。
Array.Clear(numbers, 0, numbers.Length); // 清除数组中的所有元素