一维数组 #
一、数组概述 #
数组是存储相同类型元素的固定大小集合。数组的特点:
- 固定大小,创建后不能改变
- 元素类型相同
- 索引从0开始
- 存储在连续内存中
二、数组声明 #
2.1 基本声明 #
csharp
int[] numbers;
string[] names;
double[] prices;
2.2 声明并初始化 #
csharp
int[] numbers = new int[5];
string[] names = new string[3];
2.3 声明并赋值 #
csharp
int[] numbers = new int[] { 1, 2, 3, 4, 5 };
int[] numbers = { 1, 2, 3, 4, 5 };
var numbers = new[] { 1, 2, 3, 4, 5 };
三、数组初始化 #
3.1 指定大小初始化 #
csharp
int[] numbers = new int[5];
string[] names = new string[3];
bool[] flags = new bool[4];
默认值:
| 类型 | 默认值 |
|---|---|
| 数值类型 | 0 |
| 布尔类型 | false |
| 引用类型 | null |
| 字符 | ‘\0’ |
3.2 使用初始化器 #
csharp
int[] numbers = new int[] { 1, 2, 3, 4, 5 };
int[] numbers = { 1, 2, 3, 4, 5 };
string[] names = new string[] { "张三", "李四", "王五" };
string[] names = { "张三", "李四", "王五" };
var mixed = new object[] { 1, "Hello", 3.14, true };
3.3 隐式类型数组 #
csharp
var numbers = new[] { 1, 2, 3, 4, 5 };
var doubles = new[] { 1.0, 2.0, 3.0 };
var strings = new[] { "a", "b", "c" };
四、访问数组元素 #
4.1 通过索引访问 #
csharp
int[] numbers = { 10, 20, 30, 40, 50 };
int first = numbers[0];
int third = numbers[2];
int last = numbers[numbers.Length - 1];
numbers[0] = 100;
numbers[2] = 300;
4.2 索引越界 #
csharp
int[] numbers = { 1, 2, 3 };
try
{
int value = numbers[5];
}
catch (IndexOutOfRangeException ex)
{
Console.WriteLine($"索引越界:{ex.Message}");
}
4.3 索引运算符(C# 8+) #
csharp
int[] numbers = { 10, 20, 30, 40, 50 };
int last = numbers[^1];
int secondLast = numbers[^2];
int first = numbers[^5];
五、数组属性与方法 #
5.1 Length属性 #
csharp
int[] numbers = { 1, 2, 3, 4, 5 };
int length = numbers.Length;
for (int i = 0; i < numbers.Length; i++)
{
Console.WriteLine(numbers[i]);
}
5.2 Rank属性 #
csharp
int[] oneD = new int[5];
int[,] twoD = new int[3, 4];
Console.WriteLine(oneD.Rank);
Console.WriteLine(twoD.Rank);
5.3 GetLength方法 #
csharp
int[] numbers = { 1, 2, 3, 4, 5 };
int length = numbers.GetLength(0);
六、遍历数组 #
6.1 for循环 #
csharp
int[] numbers = { 1, 2, 3, 4, 5 };
for (int i = 0; i < numbers.Length; i++)
{
Console.WriteLine($"numbers[{i}] = {numbers[i]}");
}
6.2 foreach循环 #
csharp
int[] numbers = { 1, 2, 3, 4, 5 };
foreach (int number in numbers)
{
Console.WriteLine(number);
}
6.3 反向遍历 #
csharp
int[] numbers = { 1, 2, 3, 4, 5 };
for (int i = numbers.Length - 1; i >= 0; i--)
{
Console.WriteLine(numbers[i]);
}
foreach (int number in numbers.Reverse())
{
Console.WriteLine(number);
}
七、数组切片(C# 8+) #
7.1 范围运算符 #
csharp
int[] numbers = { 1, 2, 3, 4, 5 };
int[] firstThree = numbers[0..3];
int[] lastTwo = numbers[^2..];
int[] middle = numbers[1..4];
int[] all = numbers[..];
int[] exceptLast = numbers[..^1];
7.2 Range类型 #
csharp
int[] numbers = { 1, 2, 3, 4, 5 };
Range range = 1..4;
int[] slice = numbers[range];
7.3 Index类型 #
csharp
int[] numbers = { 1, 2, 3, 4, 5 };
Index index = ^1;
int last = numbers[index];
八、数组复制 #
8.1 CopyTo方法 #
csharp
int[] source = { 1, 2, 3, 4, 5 };
int[] destination = new int[5];
source.CopyTo(destination, 0);
8.2 Array.Copy方法 #
csharp
int[] source = { 1, 2, 3, 4, 5 };
int[] destination = new int[5];
Array.Copy(source, destination, source.Length);
Array.Copy(source, 0, destination, 0, 3);
8.3 Clone方法 #
csharp
int[] original = { 1, 2, 3, 4, 5 };
int[] copy = (int[])original.Clone();
8.4 浅复制vs深复制 #
csharp
Person[] original = { new Person { Name = "张三" } };
Person[] shallowCopy = (Person[])original.Clone();
shallowCopy[0].Name = "李四";
Console.WriteLine(original[0].Name);
九、实战示例 #
9.1 数组统计 #
csharp
public static void AnalyzeArray(int[] numbers)
{
if (numbers == null || numbers.Length == 0)
{
Console.WriteLine("数组为空");
return;
}
int sum = 0;
int max = numbers[0];
int min = numbers[0];
foreach (int n in numbers)
{
sum += n;
if (n > max) max = n;
if (n < min) min = n;
}
double average = (double)sum / numbers.Length;
Console.WriteLine($"元素数量:{numbers.Length}");
Console.WriteLine($"总和:{sum}");
Console.WriteLine($"平均值:{average:F2}");
Console.WriteLine($"最大值:{max}");
Console.WriteLine($"最小值:{min}");
}
9.2 数组查找 #
csharp
public static int FindIndex(int[] array, int target)
{
for (int i = 0; i < array.Length; i++)
{
if (array[i] == target)
return i;
}
return -1;
}
public static int FindAll(int[] array, Func<int, bool> predicate)
{
int count = 0;
foreach (int n in array)
{
if (predicate(n))
count++;
}
return count;
}
9.3 数组反转 #
csharp
public static void Reverse(int[] array)
{
int left = 0;
int right = array.Length - 1;
while (left < right)
{
int temp = array[left];
array[left] = array[right];
array[right] = temp;
left++;
right--;
}
}
十、总结 #
一维数组要点:
| 要点 | 说明 |
|---|---|
| 声明 | type[] name |
| 初始化 | new type[size] 或 |
| 访问 | array[index] |
| 长度 | array.Length |
| 切片 | array[start…end] |
下一步,让我们学习多维数组!
最后更新:2026-03-26