C#入门之数组(二)


一、二维数组的定义

  C# 支持多维数组,多维数组又称为矩形数组。多维数组最简单的形式是二维数组。
  而二维数组,在本质上,是一个一维数组的列表。一个二维数组可以被认为是一个带有 x 行和 y 列的表格。以下就是一个包含3行4列的二位数组:array[3][4]


二、二维数组的使用

  二维数组可以直接类比一维数组,一样需要声明以及初始化,我们需要掌握的基本操作则是对二维数组的增删改查和遍历。

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联想到布尔数组。


总结

  本篇文章没有再详解如何完成二维数组的删除,大家可以参考数组增加元素的方法完成二维数组。浅浅回顾本篇博客要点:

  • 概念:同一变量类型的 行列数据集合
  • 必须掌握:申明,遍历,增删查改
  • 所有的变量类型都可以申明为 二维数组
  • 游戏中一般用来存储 矩阵,再控制台小游戏中可以用二维数组 来表示地图格子
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值