一、数组分类
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逗号二维、2逗号三维
-
GetLength(n):获取指定维度的长度(遍历必备)
-
Rank:获取数组是几维数组
-
Length:获取所有维度总元素数量
-
二维数组遍历:双层for循环(可下标、可修改)
-
foreach 遍历多维数组:扁平化读取,无法区分行列
-
多维数组支持:先空初始化,再循环批量赋值