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

相关推荐
无限码力16 分钟前
阿里算法岗 0530笔试真题 - 多约束条件下的元素匹配统计
算法·阿里笔试真题·阿里机试真题·阿里算法岗笔试
lqqjuly24 分钟前
MLA — 多头潜在注意力深度解析
深度学习·神经网络·算法
宋拾壹28 分钟前
同时添加多个类目
android·开发语言·javascript
吴可可12344 分钟前
SolidWorks草图转三维DWG技巧
算法
凡人叶枫1 小时前
Effective C++ 条款04:确定对象被使用前已先被初始化
java·linux·开发语言·c++·嵌入式开发
redaijufeng1 小时前
C++雾中风景7:闭包
c++·算法·风景
小小龙学IT1 小时前
Go 语言后端开发:从并发模型到生产落地的工程实践
开发语言·后端·golang
ytttr8731 小时前
Qt 数字键盘实现
开发语言·qt
wearegogog1231 小时前
C# .NET 文件比较工具 WinForms
开发语言·c#·.net
再写一行代码就下班2 小时前
Cursor配置Java环境、创建Spring Boot项目的步骤
java·开发语言·spring boot