CSharp一维数组:多维数组:交错数组:三者对比分析

作者:袖梨 2026-06-08

一、数组核心概念必考

1. 数组定义

C#一维数组多维数组交错数组三者对比分析

数组是存储相同类型数据的容器数组长度固定不可变

2. 索引下标规则

  • 索引从 0 开始

  • 数组长度从 1 开始

  • 最大索引 = 数组长度 - 1

3. 底层原理

所有数组都直接或间接继承自 Array 类数组数据顺序连续存储。

4. 数组最大特点重中之重

  • 长度固定一旦创建不可修改

  • 数据在内存中 连续顺序存储

  • 通过 下标/索引 操作元素

  • 所有数组都继承于 Array

二、各类数组默认值必背

  • 创建空数组未赋值时系统自动填充默认值

  • int[] → 默认值0

  • double[] → 默认值0

  • bool[] → 默认值false

  • string[] → 默认值null

  • char[] → 默认值 空字符

  • object[] → 默认值null

三、数组四种定义+赋值方式全覆盖

1. 先定义、后开辟空长度

int[] ages;
ages = new int[10]; // 开辟长度为10的空数组

2. 指定长度 + 初始化元素

string[] names = new string[5] { "张三", "张三", "张三", "张三", "张三" };

规则定义的长度必须和大括号元素个数一致否则报错。

3. 不指定长度自动匹配元素个数

int[] ages = new int[] { 1, 2, 3 };

4. 最简字面量定义最常用

int[] nums = { 1, 2, 3 };

四、数组元素赋值与取值

1. 单个赋值

string[] msgs = new string[100];
msgs[0] = "张三";
msgs[1] = "搜索";

2. 循环批量赋值

for (int i = 0; i < msgs.Length; i++)
{
    msgs[i] = i + "深度";
}

msgs.Length获取数组总长度只读属性

3. 取值

Console.WriteLine(msgs[99]); // 根据下标取值

五、数组两种遍历方式重点对比

1. for循环遍历

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

优点可以获取下标i、可以修改数组元素

2. foreach遍历

foreach (string item in msgs)
{
    Console.WriteLine(item + "++++");
}

item代表数组中当前遍历的元素等价于 msgs[i]

3. for 和 foreach 终极区别必背

  • for功能强大可以获取下标、可以修改元素、灵活

  • foreach写法简单、代码少

  • foreach缺点无法获取下标、不能修改原数组元素

六、object万能数组了解+必考选择题

普通数组只能存一种类型object数组可以存储任意数据类型

object[] arr = new object[5] { 1, 2, 3, "张三", true };

foreach (object item in arr)
{
    Console.WriteLine(item);
}

缺点取出的数据都是object类型需要强制转换才能运算。

输出数组名Console.WriteLine(arr) → 输出 System.Object[]所有数组直接打印都输出类型名

七、高频报错索引超出数组界限

string[] msgs = new string[100];
msgs[100] = "ss"; // 报错

报错原因长度100下标范围只能是 0~99没有100下标。

口诀下标最大=长度-1

八、终极必背总结默写短句

  • 数组固定长度、存同类型、下标从0开始

  • int默认0、bool默认false、string默认null、char默认

  • 四种数组定义方式长度可指定可自动推断

  • for可下标可修改foreach简洁不能下标不能改

  • object数组万能存储但是需要类型转换

  • 禁止下标越界最大下标=长度-1

  • 直接打印数组名输出数组类型名称

九、数组特点+优缺点总结

优点

  • 查询速度快通过下标直接定位

  • 结构简单、顺序存储

缺点

  • 长度固定不可扩容

  • 增删数据效率低

多维数组二维三维

一、多维数组核心概念必背

1. 多维数组二维及以上数组统称多维数组是一维数组的扩展用于存储结构化、立体化数据

2. 维度判定万能口诀逗号个数 + 1 = 维度数

  • int[,] → 1个逗号 → 二维数组行+列表格结构

  • int[,,] → 2个逗号 → 三维数组块+行+列立体结构

3. 通用特性长度固定、存储同类型数据、下标从0开始、内存连续存储遵循数组核心规则

二、多维数组两种定义方式全覆盖

1. 指定维度长度空数组后续赋值

语法数据类型[维度1,维度2...] 数组名 = new 数据类型[长度1,长度2...];

int[,] arr2 = new int[2, 3];   // 二维2行3列
int[,,] arr3 = new int[2, 3, 4];// 三维2块、3行、4列

2. 自动推导维度初始化赋值无需写长度

根据大括号嵌套层数、元素个数自动识别各维度长度

二维数组初始化案例
int[,] ints = new int[,]
{
    {1,2,3 },
    {4,5,6},
    {7,8,9},
};
// 自动识别3行3列
三维数组初始化案例
int[,,] ints1 = new int[,,]
{
    { {1,2,3}, {1,2,3} },
    { {1,2,113}, {1,2,339} }
};
// 自动识别2块、2行、3列

三、多维数组五大核心属性/方法必考

所有多维数组通用是遍历、取值的核心依据

  • Rank获取数组维度数二维返回2三维返回3

  • Length获取数组总元素个数32位整型

  • LongLength获取数组总元素个数64位整型适配超大数组

  • GetLength(n)获取指定维度的长度最常用

维度索引对应规则死记

  • 二维数组GetLength(0)=行数 、 GetLength(1)=列数

  • 三维数组GetLength(0)=块数 、 GetLength(1)=行数 、 GetLength(2)=列数

  • 所有维度下标从0开始最大下标=维度长度-1

完整测试代码

string[,] strings = new string[,]
{
    {"孙悟空","猪八戒","沙和尚" },
    {"刘备","曹操","孙权" },
    {"宋江","林冲","吴用" },
    {"贾宝玉","林黛玉","薛宝钗"}
};
Console.WriteLine(strings.Rank);         // 2二维数组
Console.WriteLine(strings.Length);       // 12总元素数
Console.WriteLine(strings.GetLength(0)); // 4行数
Console.WriteLine(strings.GetLength(1)); // 3列数

四、多维数组取值 & 赋值

1. 取值语法

二维数组[行下标, 列下标]

三维数组[块下标, 行下标, 列下标]

Console.WriteLine(strings[0, 0]);    // 孙悟空
Console.WriteLine(strings[3, 1]);    // 林黛玉
Console.WriteLine(ints1[1, 1, 2]);   // 339

2. 赋值语法

五、多维数组两种遍历方式大题必考

1. 嵌套for循环精准遍历可改值、可定位

适用场景需要区分行列、修改元素、精准操作数据

外层循环遍历第一维度行/块内层循环遍历第二、三维度列

// 二维数组双层for遍历
for (int i = 0; i < strings.GetLength(0); i++) // 遍历所有行
{
    for (int j = 0; j < strings.GetLength(1); j++) // 遍历当前行所有列
    {
        Console.Write(strings[i, j] + " ");
    }
    Console.WriteLine(); // 换行分行展示
}

2. foreach遍历简洁快速只读遍历

特性无视所有维度直接平铺遍历数组所有元素

缺点无法获取行列下标、不能修改原数组元素

foreach (var item in strings)
{
    Console.WriteLine(item);
}

六、动态批量赋值空多维数组填充数据

场景定义空多维数组通过嵌套循环批量赋值

string[,] names = new string[5, 10]; // 5行10列空数组
for (int i = 0; i < names.GetLength(0); i++)
{
    for (int j = 0; j < names.GetLength(1); j++)
    {
        names[i, j] = $"行:{i} 列:{j}";
    }
}
Console.WriteLine(names[3, 9]); // 读取指定位置数据

七、经典定点赋值案例考试常考

需求初始化二维数组指定 arr[0,3]=10、arr[1,2]=20、arr[2,2]=30其余元素为0

int[,] ints2 = new int[,]
{
    {0,0,0,10},
    {0,0,20,0 },
    {0,0,30,0 }
};

八、拓展多维数组+随机数实战随机取值

利用随机数生成合法下标随机读取数组元素高频实操考点

string[] xings = {"赵","钱","孙","李","诸葛","夏侯","东方","欧阳"};
string[] names1 = { "亮", "娜娜", "月初", "惇", "匡胤", "多多", "权", "世民" };
Random rnd = new Random();

// 随机生成合法下标0 ~ 数组长度-1
int index1 = rnd.Next(0, xings.Length);
int index2 = rnd.Next(0, names1.Length);
Console.WriteLine(xings[index1] + names1[index2]);

九、多维数组 高频易错点扣分避坑

  • 1. 多维数组下标格式[行,列]不能写成 [i][j]和其他语言区别

  • 2. 遍历多维数组禁止用数组名.Length做循环条件必须用 GetLength(维度)

  • 3. 下标越界任意维度下标最大取值 = 该维度长度 - 1

  • 4. foreach遍历多维数组无法区分行列只能读取不能修改

  • 5. 多维数组初始化每行元素个数必须一致否则编译报错

  • 6. 直接打印多维数组名输出系统类型名不会输出元素

十、终极默写短句考前速记

  • 维度判定逗号个数+1=维度数

  • Rank取维度数Length取总元素数GetLength取单维度长度

  • 二维0维是行、1维是列三维0块1行2列

  • 嵌套for可遍历可改值foreach平铺只读无下标

  • 多维下标逗号分隔禁止多括号写法

  • 所有维度下标从0开始最大下标=维度长度-1

交错数组

一、交错数组核心概念必考

1. 定义

交错数组也叫锯齿数组大数组里面存放的每一个元素都是一个独立的小数组

2. 最核心特点区别多维数组

交错数组每一个内层小数组的长度可以不相同长短不一、参差不齐

多维数组每一行/列长度必须完全一致规规矩矩的表格

二、语法格式必背

1. 二维交错数组语法

格式数据类型[][] 数组名

多个中括号每一个中括号代表一层数组

  • int[][] → 两层交错数组数组套数组

  • int[][][] → 三层交错数组

2. 完整初始化方式

// 先定义多个长度不同的一维数组
int[] i1s = new int[4] { 1, 2, 3, 4 };     // 长度4
int[] i2s = new int[] { 1, 2, 3, 4, 5 };    // 长度5

// 外层大数组存放不同长度的小数组
int[][] ints = new int[][]
{
    i1s,
    i2s,
    new int[]{1,2,3,4,5,999} // 长度6
};

核心特征内层数组长度 4、5、6 完全不统一这就是交错数组。

三、交错数组 取值 & 赋值

1. 分步取值

先取出内层数组再取数组内元素

int[] arr = ints[1];  // 取出第2个内层数组i2s
int a = arr[4];       // 取出该数组下标4的元素
Console.WriteLine(a);

2. 一键取值常用

数组[外层下标][内层下标]

Console.WriteLine(ints[2][5]); // 999

3. 修改元素值

ints[1][2] = 888; // 修改指定外层、内层下标元素

四、交错数组两种遍历方式大题必考

1. 双层 for 循环遍历重点

外层循环遍历外层大数组ints.Length

内层循环遍历每一个内层小数组ints[i].Length

⚠ 重点内层长度不能写死必须用 ints[i].Length因为每个数组长度不一样

for (int i = 0; i < ints.Length; i++)
{
    Console.WriteLine("当前内层数组长度" + ints[i].Length);
    for (int j = 0; j < ints[i].Length; j++)
    {
        Console.WriteLine($"({i}:{j}={ints[i][j]})");
    }
}

2. 双层 foreach 遍历

外层遍历取出每一个内层数组

内层遍历取出当前数组的每一个元素

foreach (int[] item in ints)
{
    foreach (int item1 in item)
    {
        Console.WriteLine(item1 + "+++++++");
    }
}

五、交错数组必背易错点

  • 1. 交错数组是多括号 [][]多维数组是逗号 [,]语法绝对不能混

  • 2. 交错数组最大特点内层数组长度可以不同

  • 3. 遍历交错数组内层必须使用ints[i].Length不能写固定值

  • 4. 取值格式[外层下标][内层下标]不是逗号格式

  • 5. 多维数组是一个整体表格交错数组是数组集合每个元素是独立数组

六、终极默写短句考前速记

  • 交错数组数组套数组双层括号[][]长度参差不齐

  • 多维数组逗号[,]规则表格行列长度统一

  • 交错取值双层下标多维取值逗号分隔

  • 交错遍历内层长度随数组变化不能写死

三种数组终极对比总结一维、二维、交错

// 1. 一维数组单组数据
int[] arr1 = new int[3] { 1, 2, 3 };

// 2. 二维多维数组规则表格、长宽统一
int[,] arr2 = new int[,]
{
    {1,2,3},
    {4,5,6}
};

// 3. 二维交错数组数组套数组、长度随意
int[][] arr3 = new int[][]
{
    new int[]{1,2},
    new int[]{3,4,5,6}
};

第一部分三大数组终极对比考试简答题满分

1. 语法区别

  • 一维数组[]

  • 多维数组[,] 逗号分隔、规则表格

  • 交错数组[][] 多括号嵌套、不规则锯齿

2. 结构区别

  • 多维数组所有行列长度统一整体表格

  • 交错数组每行长度可以不一样数组嵌套数组

3. 取值区别

  • 多维[行,列]

  • 交错[外层][内层]

4. 长度获取区别

  • 多维数组GetLength(维度)

  • 交错数组外层.Length / 内层[i].Length

第二部分数组全套易错点汇总满分避坑

  • 1. 数组长度固定不支持扩容

  • 2. 所有下标遵循最大下标 = 长度 - 1禁止越界

  • 3. 一维遍历用 Length多维遍历必须用 GetLength()

  • 4. 多维逗号[,]、交错双括号[][]语法绝对不能混用

  • 5. 交错数组内层长度不统一遍历必须动态获取长度

  • 6. foreach 遍历所有数组都是只读不能修改原数据

  • 7. 直接打印数组名输出类型不输出元素

第三部分终极默写短句考前速记

  • 数组固定长度存同类下标从零起最大长度减一

  • 数值默认0布尔false字符串null字符空

  • for带下标可改值foreach简洁只读无下标

  • 多维逗号规则表行列长度都统一

  • 交错括号数组套内层长度不统一

  • 多维取值逗号隔交错取值双层括

总结

以上为个人经验希望能给大家一个参考也希望大家多多支持本站。

您可能感兴趣的文章:
  • 基于C#实现一维码和二维码打印功能
  • 利用C#实现Word文档多维度信息统计
  • C#实现获取多维数组的行数与列数
  • C#中的矩形数组(多维数组)和锯齿数组的实现
  • C#二维数组与多维数组的具体使用

相关文章

精彩推荐