概述
数组是一种数据结构,存储连续内存位置的相同类型的元素的集合,通过使用索引进行访问元素。数组提供了一种有效存储和访问固定数量元素的方法。本文一起来了解使用数组,从基础到高级的摘要。
数组
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.3
Console.WriteLine(prices[1]);
可以重新为数组中的元素分配新值。
numbers[0] = 10;
// 将第三个元素更改为18.9
prices[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.Clone
string[] 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 编辑过