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

相关推荐
可编程芯片开发14 分钟前
基于CPS-SPWM链式STATCOM系统在电压不平衡环境下控制策略的simulink建模与仿真
算法
苍狼唤23 分钟前
WinForm练习知识补充(多线程)
c#
2zcode35 分钟前
基于MATLAB图像处理的饮料瓶灌装液位检测系统设计与实现
开发语言·图像处理·matlab
Jerry43 分钟前
LeetCode 202. 快乐数
算法
hans汉斯1 小时前
基于改进交叉熵损失函数与Transformer的心电信号高风险分类研究
功能测试·深度学习·算法·yolo·目标检测·分类·transformer
Jerry1 小时前
LeetCode 349. 两个数组的交集
算法
必须得开心呀2 小时前
QT解决中文乱码问题
开发语言·qt
YuK.W2 小时前
Leetcode100: 70.爬楼梯、118.杨辉三角、198.打家劫舍
java·算法·leetcode
随意起个昵称2 小时前
状压dp-基础题目2([USACO12MAR] Cows in a Skyscraper G)
c++·算法·动态规划
这不小天嘛3 小时前
JAVA八股——redis篇
java·开发语言·redis