C#多维数组

一、数组分类

C# 数组分为两大类:

  • 一维数组:普通线性数组(之前所学)

  • 多维数组 :二维、三维及以上,通过逗号区分维度

多维数组核心规则:

intN个逗号 = 代表 N+1 维数组

  • 无逗号 → 一维数组

  • 1个逗号 → 二维数组

  • 2个逗号 → 三维数组


二、二维数组定义(表格:行、列)

二维数组可以理解为 多行多列的表格

1. 固定行列长度定义

cs 复制代码
// 2行3列的二维数组
int[,] ints = new int[2, 3];

2. 自动推导行列(常用)

不写维度长度,根据初始化数据自动识别几行几列

cs 复制代码
int[,] ints = new int[,]
{
    {1,2,3 },
    {4,5,6},
    {7,8,9},
};
// 最终:3行3列

三、三维数组定义(空间结构)

三维数组理解为:多个二维表格组成的空间(1维页、2维行、3维列)

1. 固定维度定义

cs 复制代码
// 2个空间、3行、4列
int[,,] ints1 = new int[2, 3, 4];

2. 自动推导维度(多层大括号)

cs 复制代码
int[,,] ints1 = new int[,,]
{
    {
        {1,2,3},
        {1,2,3}
    },
    {
        {1,2,113},
        {1,2,339}
    }
};

三维维度长度获取

cs 复制代码
Console.WriteLine(ints1.GetLength(0)); // 第一维长度:2
Console.WriteLine(ints1.GetLength(1)); // 第二维长度:2
Console.WriteLine(ints1.GetLength(2)); // 第三维长度:3

// 获取指定坐标元素
Console.WriteLine(ints1[1, 1, 2]); // 339

口诀:0是行,1是列,2是面(三维)

四、多维数组核心属性与方法(必考)

以二维字符串数组为例:

cs 复制代码
string[,] strings = new string[,]
{
    {"孙悟空","猪八戒","沙和尚" },
    {"刘备","曹操","孙权" },
    {"宋江","林冲","吴用" },
    {"贾宝玉","林黛玉","薛宝钗"}
};

1. 四大核心属性

cs 复制代码
Console.WriteLine(strings.Length);     // 总元素个数:12(32位)
Console.WriteLine(strings.LongLength);  // 总元素个数:12(64位)
Console.WriteLine(strings.Rank);        // 维度数:2(二维数组)

2. GetLength(维度索引) 获取指定维度长度

cs 复制代码
strings.GetLength(0); // 获取第1维长度(行数):4
strings.GetLength(1); // 获取第2维长度(列数):3

五、多维数组取值、赋值

1. 取值格式

多维数组维度0下标,维度1下标,维度2下标

cs 复制代码
Console.WriteLine(strings[0, 0]); // 第一行第一列:孙悟空
Console.WriteLine(strings[0, 1]); // 第一行第二列:猪八戒
Console.WriteLine(strings[3, 1]); // 第四行第二列:林黛玉

2. 赋值修改

cs 复制代码
strings[3, 1] = "王熙凤";

六、多维数组遍历(两种方式)

1. 双层for循环(精准遍历、可改值、可获取下标)

外层循环:遍历行(第0维) 内层循环:遍历列(第1维)

cs 复制代码
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 遍历(简单、只读、不分行列)

cs 复制代码
foreach (var item in strings)
{
    Console.WriteLine(item + "--------------");
}

七、空多维数组 + 动态赋值

初始化只定义行列数量,后期循环批量赋值

cs 复制代码
// 5行10列空二维数组
string[,] names = new string[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]); // 行:3 列:9

八、课堂练习:指定下标赋值

需求: arr30,3 = 10 arr31,2 = 20 arr32,2 = 30

cs 复制代码
int[,] ints2 = new int[,]
{
    {0,0,0,10},
    {0,0,20,0 },
    {0,0,30,0 }
};

九、多维数组终极总结(背诵版)

  1. 逗号个数 = 维度-1:1逗号二维、2逗号三维

  2. GetLength(n):获取指定维度的长度(遍历必备)

  3. Rank:获取数组是几维数组

  4. Length:获取所有维度总元素数量

  5. 二维数组遍历:双层for循环(可下标、可修改)

  6. foreach 遍历多维数组:扁平化读取,无法区分行列

  7. 多维数组支持:先空初始化,再循环批量赋值

相关推荐
致Great22 分钟前
Pi 的上下文压缩,到底是怎么工作的?
算法
必须会一定会1 小时前
Agent Plugins 1.0实战:plugin.json、skills、mcp.json目录结构与迁移
开发语言·人工智能·ai编程
St_rive1 小时前
Page Object设计模式
java·开发语言·设计模式
wp123_11 小时前
硬件元器件笔记|IPX8 防水 Type‑C 母座安费诺 124018802112A 与 TONEVEE TY48086‑24A 分析
c语言·开发语言·笔记
wuyk5551 小时前
4.树:一对多的层次数据结构
开发语言·数据结构·stm32·单片机
watersink1 小时前
机器学习聚类算法
算法·机器学习·聚类
luj_17682 小时前
桥牌思维启示:系统设计的模块化架构
c语言·开发语言·c++·经验分享·算法
caimouse4 小时前
ReactOS 图形系统分析(16):字符串对象 — STROBJ(string.c)
c语言·开发语言