C# 数组(Array)
                           
天天向上
发布: 2025-04-13 13:26:34

原创
476 人浏览过

下面是从专业开发角度出发、基于 Microsoft 官方文档C# 数组(Array) 全面详解,涵盖概念、声明、初始化、使用方式、多维与交错数组、常用方法与技巧,并附有多种途径示例。


一、什么是数组?

数组(Array) 是一种数据结构,用于存储 固定大小、同一类型 的元素集合。元素在内存中是连续排列的,可通过索引访问。


二、数组的声明方式

1. 声明但不初始化

int[] numbers;    // 声明一个整型数组变量

2. 声明并指定大小

int[] numbers = new int[5]; // 声明并分配5个整数元素

3. 声明并初始化

int[] numbers = new int[] { 1, 2, 3, 4, 5 };

4. 类型推断(推荐)

var numbers = new[] { 1, 2, 3, 4 }; // 自动推断为 int[]

三、访问与修改数组元素

int[] nums = { 10, 20, 30 };
Console.WriteLine(nums[1]); // 输出 20

nums[2] = 100;
Console.WriteLine(nums[2]); // 输出 100

注意:索引从 0 开始,超出范围访问将抛出 IndexOutOfRangeException


四、数组的遍历方式

1. for 循环

for (int i = 0; i < nums.Length; i++)
{
    Console.WriteLine(nums[i]);
}

2. foreach 循环

foreach (int n in nums)
{
    Console.WriteLine(n);
}

五、多维数组(Multi-dimensional Arrays)

1. 二维数组

int[,] matrix = new int[2, 3]; // 2行3列

int[,] matrix2 = {
    { 1, 2, 3 },
    { 4, 5, 6 }
};

Console.WriteLine(matrix2[1, 2]); // 输出 6

六、交错数组(Jagged Arrays)= 数组的数组

int[][] jagged = new int[2][];
jagged[0] = new int[] { 1, 2 };
jagged[1] = new int[] { 3, 4, 5 };

Console.WriteLine(jagged[1][2]); // 输出 5

七、常用属性和方法(Array 类)

方法/属性描述
Length获取数组的元素总数
Rank获取维数(几维数组)
Array.Sort()对数组排序
Array.Reverse()反转数组中的元素
Array.IndexOf()查找元素索引
Array.Clear()清空数组元素(设置为默认值)

示例:

int[] arr = { 3, 1, 4 };
Array.Sort(arr);         // arr: [1, 3, 4]
Array.Reverse(arr);      // arr: [4, 3, 1]
Console.WriteLine(arr.Length); // 3

八、数组与内存管理

数组是 引用类型,即使是 int[] 这样的数组,其对象是分配在 托管堆 上。

⚠️ 数组大小一旦声明,不可改变。要实现动态扩容,推荐使用 List<T>


九、数组与 List<T> 比较

特性数组 T[]List(泛型列表)
大小可变❌ 否✅ 是
类型安全✅ 是✅ 是
内存效率✅ 高⚠️ 略低于数组
灵活操作❌ 少方法支持✅ Add/Remove/Sort 等
推荐使用高性能/定长数据灵活/数据不固定场景

十、实战示例:统计数字出现频率

int[] scores = { 100, 90, 80, 100, 90 };
Dictionary<int, int> freq = new Dictionary<int, int>();

foreach (int score in scores)
{
    if (!freq.ContainsKey(score))
        freq[score] = 0;
    freq[score]++;
}

foreach (var pair in freq)
{
    Console.WriteLine($"Score {pair.Key}: {pair.Value} times");
}

十一、官方文档链接


十二、最佳实践建议

建议原因
✅ 对于定长数据使用数组性能更优、内存连续
✅ 多维数组用于矩阵等结构化数据代码语义更清晰
❌ 不建议频繁使用 Array.Resize实际会分配新数组,不是真正扩容
✅ 优先使用 List<T> 处理动态或用户输入长度数据灵活、支持泛型操作、代码更简洁

更多详细内容,请关注其他相关文章!

发表回复 0

Your email address will not be published. Required fields are marked *