C Sharp 一维数组
外观
C#一维数组[编辑 | 编辑源代码]
介绍[编辑 | 编辑源代码]
一维数组是C#中最基础的数据结构之一,用于存储相同类型的元素集合。数组中的每个元素通过从0开始的索引访问,提供高效的内存管理和快速的数据访问能力。一维数组在内存中是连续存储的,这使得它们在处理大量同类型数据时非常高效。
声明与初始化[编辑 | 编辑源代码]
C#中一维数组可以通过多种方式声明和初始化:
声明语法[编辑 | 编辑源代码]
// 声明但不初始化
数据类型[] 数组名;
// 示例
int[] numbers;
初始化方式[编辑 | 编辑源代码]
// 方式1:声明时初始化
int[] numbers = new int[5]; // 创建长度为5的数组,默认值为0
// 方式2:声明并赋初始值
int[] primes = new int[] { 2, 3, 5, 7, 11 };
// 方式3:简化语法
string[] weekDays = { "Mon", "Tue", "Wed", "Thu", "Fri" };
访问数组元素[编辑 | 编辑源代码]
数组元素通过索引访问,索引从0开始:
int[] scores = { 85, 90, 78, 92, 88 };
// 访问第一个元素
int firstScore = scores[0]; // 85
// 修改第三个元素
scores[2] = 80; // 数组变为 { 85, 90, 80, 92, 88 }
数组属性与方法[编辑 | 编辑源代码]
C#数组提供了一些有用的属性和方法:
Length属性[编辑 | 编辑源代码]
获取数组的长度(元素数量):
int[] numbers = { 10, 20, 30, 40, 50 };
int length = numbers.Length; // 5
常用方法[编辑 | 编辑源代码]
int[] arr = { 5, 3, 8, 1, 9 };
// 排序
Array.Sort(arr); // 结果:1, 3, 5, 8, 9
// 反转
Array.Reverse(arr); // 结果:9, 8, 5, 3, 1
// 查找索引
int index = Array.IndexOf(arr, 5); // 2
遍历数组[编辑 | 编辑源代码]
有多种方式可以遍历数组:
for循环[编辑 | 编辑源代码]
for (int i = 0; i < numbers.Length; i++)
{
Console.WriteLine(numbers[i]);
}
foreach循环[编辑 | 编辑源代码]
foreach (int num in numbers)
{
Console.WriteLine(num);
}
内存表示[编辑 | 编辑源代码]
一维数组在内存中是连续存储的:
数学上,数组元素的内存地址可以表示为: 解析失败 (语法错误): {\displaystyle 地址 = 基地址 + (索引 \times 元素大小) }
实际应用案例[编辑 | 编辑源代码]
案例1:成绩统计[编辑 | 编辑源代码]
// 计算学生平均分
double[] grades = { 85.5, 90.0, 78.5, 92.5, 88.0 };
double sum = 0;
foreach (double grade in grades)
{
sum += grade;
}
double average = sum / grades.Length;
Console.WriteLine($"平均分: {average:F2}"); // 输出: 平均分: 86.90
案例2:温度转换[编辑 | 编辑源代码]
// 将摄氏温度数组转换为华氏温度
double[] celsiusTemps = { 0, 10, 20, 30, 40 };
double[] fahrenheitTemps = new double[celsiusTemps.Length];
for (int i = 0; i < celsiusTemps.Length; i++)
{
fahrenheitTemps[i] = celsiusTemps[i] * 9/5 + 32;
}
// 输出转换结果
for (int i = 0; i < fahrenheitTemps.Length; i++)
{
Console.WriteLine($"{celsiusTemps[i]}°C = {fahrenheitTemps[i]}°F");
}
最佳实践[编辑 | 编辑源代码]
1. 总是检查数组边界,避免IndexOutOfRangeException 2. 考虑使用foreach循环来遍历数组,除非需要索引 3. 对于固定大小的集合,数组比集合更高效 4. 使用Array.Resize方法可以调整数组大小(但会创建新数组)
常见错误[编辑 | 编辑源代码]
错误1:越界访问[编辑 | 编辑源代码]
int[] arr = new int[3];
arr[3] = 10; // 抛出IndexOutOfRangeException
错误2:错误初始化[编辑 | 编辑源代码]
int[] arr;
arr = {1, 2, 3}; // 编译错误,必须使用new关键字
性能考虑[编辑 | 编辑源代码]
- 访问时间:O(1) - 恒定时间访问
- 搜索时间:O(n) - 线性搜索
- 内存:连续分配,无额外开销
进阶主题[编辑 | 编辑源代码]
- 数组协变(Array Covariance)
- 缓冲区操作(Buffer.BlockCopy)
- 固定大小缓冲区(在unsafe上下文中)
总结[编辑 | 编辑源代码]
一维数组是C#中处理同类型元素集合的基本工具。它们提供了高效的存储和访问机制,适合处理固定大小的数据集合。理解数组的基本操作和特性是掌握更复杂数据结构的重要基础。