概述
数组是一种数据结构,存储连续内存位置的相同类型的元素的集合,通过使用索引进行访问元素。数组提供了一种有效存储和访问固定数量元素的方法。本文一起来了解使用数组,从基础到高级的摘要。
数组
1、数组要点
2、数组优点
3、数组缺点
4、数组使用
在 C# 中可以使用多种方式声明数组,以下是一些示例。
// 声明一个整数数组int[] numbers = new int[5];// 声明和初始化数组string[] books = { "语文", "数学", "英语" };// 使用显式大小和初始化进行声明double[] prices = new double[] { 10.5, 20.3, 15.7 };// 声明数组后进行初始化int[] scores;scores = new int[] { 88, 92, 74, 100 };
数组元素使用索引访问,索引从 0 开始。
// 输出 语文Console.WriteLine(books[0]);// 输出 20.3Console.WriteLine(prices[1]);
可以重新为数组中的元素分配新值。
numbers[0] = 10; // 将第三个元素更改为18.9prices[2] = 18.9;
通过使用 for 循环或 foreach 循环来遍历数组元素。
// 使用for循环for (int i = 0; i < numbers.Length; i++){ Console.WriteLine(numbers[i]);}// 使用foreach循环foreach (string book in books){ Console.WriteLine(book);}
C# 支持多维数组,如二维数组。
// 声明二维数组int[,] matrix = new int[3, 3];// 声明并初始化二维数组int[,] matrix2 = { { 11, 20, 32 }, { 41, 52, 60 }, { 70, 81, 95 } };// 访问二维数组元素 【输出 20】Console.WriteLine(matrix2[0, 1]);
C# 支持交错数组【其含意为数组的数组(可以具有不同长度的数组)】。
// 声明交错数组int[][] jaggedArray = new int[3][];// 初始化交错数组jaggedArray[0] = new int[] { 11, 21 };jaggedArray[1] = new int[] { 30, 40, 50 };jaggedArray[2] = new int[] { 16, 17, 18, 19 };// 访问交错数组元素 【输出 50】Console.WriteLine(jaggedArray[1][2]);
数组具有一些内置方法,通过使用它们可对数组进行排序、反转、复制、查找等操作。
Array.Sort:对数组进行排序。
Array.Reverse:反转数组的元素。
Array.Copy: 将元素从一个数组复制到另一个数组。
int[] copiedArray = new int[3];Array.Copy(numbers, copiedArray, 3);
Array.Find: 根据条件查找元素。
int found = Array.Find(numbers, x => x > 10); Console.WriteLine(found);
数组长度表示了数组中的元素个数,可以使用Length属性和GetLength方法获取。
// 输出数组的长度Console.WriteLine(numbers.Length);// 输出二维数组中的行数Console.WriteLine(matrix2.GetLength(0)); // 输出二维数组中的列数Console.WriteLine(matrix2.GetLength(1));
可以使用特定值初始化数组或使用 Enumerable。重复上述步骤以创建填充相同值的数组。
// 使用特定值初始化数组int[] filledArray = new int[5] {0,0,0,0,0};// 使用Enumerable.Repeat 操作以用相同的值填充数组var repeatedArray = Enumerable.Repeat(18, 5).ToArray(); // 数组大小为5,所有元素均为18
LINQ 提供了强大的方法来作和查询数组。
using System.Linq;// 创建数组int[] numbers = { 1, 3, 8, 6, 14 };// 查找数组中的所有偶数var evenNumbers = numbers.Where(n => n % 2 == 0).ToArray();// 找到第一个大于4的数字var firstGreaterThan = numbers.FirstOrDefault(n => n > 4);// 求数组中所有元素的总和var sum = numbers.Sum();// 求元素的平均值var average = numbers.Average();Console.WriteLine("偶数: " + string.Join(", ", evenNumbers));Console.WriteLine("第一个大于4的数字: " + firstGreaterThan);Console.WriteLine("总和: " + sum);Console.WriteLine("平均值: " + average);
在 C# 中也可以创建对象数组。
// 定义一个类public class Person{ public string Name { get; set; } public int Age { get; set; } public Person(string name, int age) { Name = name; Age = age; }}// 创建对象数组Person[] people = { new Person("小明", 14), new Person("小虎", 16), new Person("小天", 13)};// 访问元素Console.WriteLine(people[0].Name);Console.WriteLine(people[1].Age);
可以将数组传递给方法并对其进行作。数组是通过引用传递的,因此在方法中所做的更改将影响原始数组。
using System;internal class Program{ static void Main(string[] args) { string[] books = { "语文", "数学", "英语" }; Console.WriteLine("调用方法前:"); foreach (string book in books) { Console.WriteLine(book); } ModifyArray(books); Console.WriteLine("调用方法后:"); foreach (string book in books) { Console.WriteLine(book); } Console.Read(); } /// /// </summary> /// <param name="arr"></param> public static void ModifyArray(string[] arr) { for (int i = 0; i < arr.Length; i++) { arr[i] = string.Format("{0}{1}", arr[i], i); } }}
数组复制可以通过以下几种方式进行:
Array.Copy: 将元素从一个数组复制到另一个数组。
Array.Clone: 创建数组的浅表副本。
Array.ConstrainedCopy: 复制具有附加安全检查的图元。
// 使用Array.Copy方法复制string[] books = { "语文", "数学", "英语" };string[] copyToBooks = new string[3];Array.Copy(books, copyToBooks, 3);// 使用 Array.Clonestring[] clonedArray = (int[])books.Clone();// 修改原始数组books[0] = "化学";Console.WriteLine("原数组: " + string.Join(", ", books));Console.WriteLine("克隆数组: " + string.Join(", ", clonedArray));
C# 中不直接允许调整数组的大小,但可以使用 Array.Resize 创建具有不同大小的新数组。
// 原数组string[] books = { "语文", "数学", "英语" };// 调整数组大小Array.Resize(ref books, 5); // 调整为5个元素// 初始化新调整大小的数组books[3] = "物理";books[4] = "物理";// 输出 "语文, 数学, 英语, 物理, 化学"Console.WriteLine(string.Join(", ", books));
数组大小固定,而 List<T> 更灵活,因为它可以动态增长或收缩。
string[] books = { "语文", "数学", "英语", "物理", "化学" };ArraySegment<string> segment = new ArraySegment<string>(books, 1, 3);foreach (var item in segment){ // 输出 数学 英语 物理 Console.Write(item); Console.Write(" ");}
小结
以上是以摘要的方式,介绍了数组从基础到高级的相关内容的全貌,并列举了一些示例。
阅读原文:原文链接
该文章在 2025/3/24 17:11:03 编辑过