文章目录
一、二维数组的定义
C# 支持多维数组,多维数组又称为矩形数组。多维数组最简单的形式是二维数组。
而二维数组,在本质上,是一个一维数组的列表。一个二维数组可以被认为是一个带有 x 行和 y 列的表格。以下就是一个包含3行4列的二位数组:![array[3][4]](https://i-blog.csdnimg.cn/img_convert/b5f9968a391a27bd4ca153d6dd4e0708.jpeg#pic_center)
二、二维数组的使用
二维数组可以直接
类比一维数组,一样需要声明以及初始化,我们需要掌握的基本操作则是对二维数组的增删改查和遍历。
1.声明以及初始化
//变量类型[,] 二维数组变量名;
int[,] arr; //申明过后 会在后面进行初始化
//变量类型[,] 二维数组变量名 = new 变量类型[行,列];
int[,] arr2 = new int[3, 3];
//变量类型[,] 二维数组变量名 = new 变量类型[行,列]{ {0行内容1, 0行内容2, 0行内容3.......}, {1行内容1, 1行内容2, 1行内容3.......}.... };
int[,] arr3 = new int[3, 3] { { 1, 2, 3 },
{ 4, 5, 6 },
{ 7, 8, 9 } };
//变量类型[,] 二维数组变量名 = new 变量类型[,]{ {0行内容1, 0行内容2, 0行内容3.......}, {1行内容1, 1行内容2, 1行内容3.......}.... };
int[,] arr4 = new int[,] { { 1, 2, 3 },
{ 4, 5, 6 },
{ 7, 8, 9 } };
//变量类型[,] 二维数组变量名 = { {0行内容1, 0行内容2, 0行内容3.......}, {1行内容1, 1行内容2, 1行内容3.......}.... };
int[,] arr5 = { { 1, 2, 3 },
{ 4, 5, 6 },
{ 7, 8, 9 } };
2.获取数组的长度
&esnp;相比于一维数组,二维数组的长度需要从两个维度去考虑:行和列。
Console.WriteLine(array.GetLength(0));
Console.WriteLine(array.GetLength(1));
3.获取数组元素
注意:第一元素的索引值(index)为0,最后一个元素的索引值肯定时长度-1.
Console.WriteLine(array[0, 1]);
Console.WriteLine(array[1, 2]);
4.修改数组元素
array[0, 0] = 99;
Console.WriteLine(array[0, 0]);
5.遍历二维数组
for (int i = 0; i < array.GetLength(0); i++)
{
for (int j = 0; j < array.GetLength(1); j++)
{
//i 行 0 1
//j 列 0 1 2
Console.WriteLine(array[i, j]);
//0,0 0,1 0,2
//1,0 1,1 1,2
}
}
6.增加数组元素
数组声明初始化过后,就不能再原有的基础上进行添加或者删除了,所以我们需要新初始化一个数组,把原有数组元素拷贝过去再将新的元素赋值过去,实现数组的增加。
int[,] array2 = new int[3, 3];
for (int i = 0; i < array.GetLength(0); i++)
{
for (int j = 0; j < array.GetLength(1); j++)
{
array2[i, j] = array[i, j];
}
}
array = array2;
array[2, 0] = 7;
array[2, 1] = 8;
array[2, 2] = 9;
}
三、小试身手
(1)1-10000的赋值
将1-10000中所有数组赋值到一个二维数组中,代码如下:
int[,] array = new int[100, 100];
int index = 1;
for (int i = 0; i < array.GetLength(0); i++)
{
for (int j = 0; < array.GetLength(1); j++)
{
array[i, j] = index;
++index;
Console.Write(array[i, j] + " ");
}
Console.WriteLine();
}
(2)求对角线元素的和
求二维数组(3行3列)的对角线元素的和(元素随机1~10):
int[,] array = new int[3, 3];
Random r = new Random();
int sum = 0;
for (int i = 0; i< array.GetLength(0); i++)
{
for (int j = 0; j < array.GetLength(1); j++)
{
array[i, j] = r.Next(1, 11);
//对角线 元素 满足的条件,
if( i == j || i + j == 2 )
{
sum += array[i, j];
}
Console.Write(array[i, j] + " ");
}
Console.WriteLine();
}
Console.WriteLine(sum);
本题可自行提升难度,将让用户自主输入二维数组的行列数,需要的同学自行升级。
(3)转换数组
设定一个M*N的二维数组,数组元素的值为0或者1,要求转换数组,将含有1的行和列全部置1.
int[,] array = new int[5, 5] { { 0,0,0,0,0},
{ 0,0,0,0,0},
{ 0,0,1,1,0},
{ 0,0,0,0,0},
{ 0,0,0,0,0}};
Random r = new Random();
bool[] hang = new bool[5];
bool[] lie = new bool[5];
for (int i = 0; i < array.GetLength(0); i++)
{
for (int j = 0; j < array.GetLength(1); j++)
{
//array[i, j] = r.Next(0, 2);
if( array[i,j] == 1 )
{
//记录了 当前 行列 是否要变1的标识
//要变一 就置true
hang[i] = true;
lie[j] = true;
}
Console.Write(array[i, j] + " ");
}
Console.WriteLine();
}
for (int i = 0; i < array.GetLength(0); i++)
{
for (int j = 0; j < array.GetLength(1); j++)
{
//满足行和列的标识 是ture 就变一
if( hang[i] || lie[j] )
{
array[i, j] = 1;
}
Console.Write(array[i, j] + " ");
}
Console.WriteLine();
}
本题可自行提升难度,将让用户自主输入二维数组的行列数,需要的同学自行升级。
本题亮点:由0和1联想到布尔数组。
总结
本篇文章没有再详解如何完成二维数组的删除,大家可以参考数组增加元素的方法完成二维数组。浅浅回顾本篇博客要点:
- 概念:同一变量类型的 行列数据集合
- 必须掌握:申明,遍历,增删查改
- 所有的变量类型都可以申明为 二维数组
- 游戏中一般用来存储 矩阵,再控制台小游戏中可以用二维数组 来表示地图格子
&spm=1001.2101.3001.5002&articleId=145889262&d=1&t=3&u=a4f0695ebb9840febf8b3a9314d1134f)
1440

被折叠的 条评论
为什么被折叠?



