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. 多维数组支持:先空初始化,再循环批量赋值

相关推荐
Wang's Blog11 分钟前
Go-Zero项目开发33: IM实时通信前后端对接与微服务基础设施实践
开发语言·微服务·golang·go-zero
dyxal13 分钟前
eˣ 的泰勒展开式:从“化繁为简”到“万物统一”的微积分之美
算法
SelectDB技术团队20 分钟前
丰巢日志平台 ELK 替代:Apache Doris / SelectDB 的技术能力与实践
开发语言·python
BetterFlow_CFD21 分钟前
COMSOL声学仿真基础知识(二)
开发语言·算法·matlab
麻瓜老宋25 分钟前
AI开发C语言应用按步走,表达式计算器calc的第十九步,注释、表达式分隔符、long double 精度
c语言·开发语言·atomcode
崖边看雾25 分钟前
Python学习——函数
开发语言·windows·python·学习·pycharm
宸津-代码粉碎机39 分钟前
Jar热部署进阶实战|修复原生方案OOM与类冲突问题,生产级无BUG优化方案
java·大数据·服务器·开发语言·前端·人工智能·python
互联网中的一颗神经元11 小时前
小白python入门 - 39. 采集流水线小项目
开发语言·python
徐小夕12 小时前
花了一周,3亿tokens,我开源了一款 Word 文档智能审查平台,文稿自动质检+可视化分析,告别低效人工审核
前端·算法·github
Wang's Blog12 小时前
Go-Zero 项目开发22:用户群聊功能的实现与完善
开发语言·golang