一维数组 #

一、数组概述 #

数组是存储相同类型元素的固定大小集合。数组的特点:

  • 固定大小,创建后不能改变
  • 元素类型相同
  • 索引从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