C# 数组 (Arrays) 知识点详解
数组是 C# 中最基础的数据结构,用于存储固定大小的同类型元素集合。本文档涵盖了一维数组、二维数组的初始化方式,以及数组的实际应用(如计算平均值)。
1. 一维数组 (One-Dimensional Arrays)
一维数组是最简单的数组形式,类似于一行数据。
1.1 声明与实例化
使用 ``new`` 关键字创建指定长度的数组。
// 语法:数据类型[] 变量名 = new 数据类型[长度]; int[] value_data = new int[300];
- 解释:这行代码在内存中分配了能容纳 300 个整数的空间。默认情况下,`int` 类型的数组元素会被初始化为 `0`。
1.2 Object 任意类型数组
C# 是强类型语言,但通过 ``object`` 类型(所有类型的基类),可以创建一个看似能存储“任意类型”的数组。
// 定义包含字符串、数字等混合数据的数组 object[] ShuJu1 = { "123", "SN125478", "86.5", "1254", "4587" };
- 注意:虽然这样很灵活,但在使用数组中的元素时通常需要进行类型转换 (Casting) 或拆箱 (Unboxing),这可能会影响性能。
1.3 静态数组 (Static Arrays)
静态数组属于类本身,而不是类的实例。它在程序运行期间一直存在,且所有实例共享这一份数据。
public static int[] Game_map = new int[100]; // 静态的
- 应用场景:常用于存储全局配置、游戏地图数据等不需要随对象销毁的数据。
2. 二维数组 (Two-Dimensional Arrays)
二维数组可以看作是一个表格(行和列)。在 C# 中,使用 ``[,]`` 来定义矩形二维数组。
2.1 逐步初始化 (Element-by-Element)
这是最直观的方法,先声明数组大小,然后逐个赋值。
// 1. 声明一个 2行 2列 的数组 int[,] myarr = new int[2, 2]; // 2. 通过索引赋值 (索引从0开始) myarr[0, 0] = 0; // 第一行第一列 myarr[0, 1] = 1; // 第一行第二列 myarr[1, 0] = 1; // 第二行第一列 myarr[1, 1] = 2; // 第二行第二列
2.2 声明时直接初始化 (Inline Initialization)
C# 提供了多种简写方式在声明时直接填充数据。以下三种方式效果相同:
方式 A:完整语法 指定了维度长度,并填充数据。
int[,] myarr = new int[2, 2] { { 12, 0 }, { 45, 10 } };
方式 B:省略长度 编译器会根据大括号内的数据自动推断维度大小。
int[,] myarr = new int[,] { { 12, 0 }, { 45, 10 } };
方式 C:极简语法 直接省略 ``new int[,]``,这是最常用的简写方式。
int[,] myarr = { { 12, 0 }, { 45, 10 } };
3. 数组实战:计算平均值
本节展示如何将数组作为参数传递给方法,并使用 ``foreach`` 循环进行计算。
3.1 代码示例
以下代码演示了定义数组、调用方法以及计算逻辑。
using System; namespace ArrayCalculation { class Program { static void Main(string[] args) // 1. 主程序入口 { // 定义并初始化一个一维数组 int[] a = new int[3] { 1, 3, 5 }; // 调用静态方法计算平均值,并打印结果 // 注意:原代码中方法名为 max,但实际逻辑是求平均值,建议命名为 CalculateAverage double result = CalculateAverage(a); Console.WriteLine("平均值是: " + result); Console.ReadKey(); } // 静态方法:接收一个 int 数组,返回 double 类型的平均值 static double CalculateAverage(int[] kar) { double sum = 0; // 用于累加总和 (原变量 d) double count = 0; // 用于记录个数 (原变量 e) double avg; // 用于存储结果 (原变量 f) // 使用 foreach 遍历数组中的每一个元素 foreach (var item in kar) { sum = sum + item; // 累加 count = count + 1; // 计数 } // 计算平均值 if (count > 0) { avg = sum / count; } else { avg = 0; } return avg; // 返回结果 } } }
3.2 关键点解析
* 方法参数:``static double max(int[] kar)`` 表示该方法接收一个整型数组作为输入。 * foreach 循环:
- ``foreach (var item in kar)`` 是遍历数组的最佳方式之一,不需要关心数组的具体索引。
- 它会自动从数组的第一个元素遍历到最后一个元素。
* 类型转换:计算平均值时,为了保留小数部分,累加变量 ``sum`` (d) 和结果变量 ``avg`` (f) 被定义为 ``double`` 类型。如果使用 ``int`` 进行除法,小数部分会被截断。
4. 总结
| 数组类型 | 声明示例 | 特点 |
|---|---|---|
| 一维数组 | ``int[] a = new int[5];`` | 最常用,线性存储 |
| 二维数组 | ``int[,] a = new int[2,2];`` | 矩形结构,行和列长度固定 |
| Object数组 | ``object[] a = {1, “text”};`` | 可存储不同类型,需注意装箱拆箱性能 |
| 静态数组 | ``static int[] a;`` | 全局共享,生命周期贯穿程序运行 |
评论