Unity基础之C#基础篇笔记2:复杂数据类型(二维数组,交错数组)

Unity基础之C#基础篇笔记2:复杂数据类型(二维数组,交错数组)

  • 二维数组
    • 1.基本概念
    • 2.二维数组的声明
    • 3.二维数组的使用
    • 4.二维数组练习题
  • 交错数组
    • 1.基本概念
    • 2.数组的声明
    • 3.交错数组的使用

二维数组

1.基本概念

	二维数组是使用两个下标(索引)来确定元素的数组
	两个下标可以理解成行标和列标
 	比如矩阵
	1 2 3
	4 5 6
	可以用二维数组int[2,3]表示
	好比两行三列的数据集合 

2.二维数组的声明

		1.变量类型[,]  二维数组名;
		   int[,] arr;	申明过后会在后面进行初始化
		2.变量类型[,]  二维数组变量名 = new   变量类型[行,列];
		   int[,] arr2 = new int[3,3];
		3.变量类型[,]  二维数组变量名 = new 变量类型[行,列]{{0行内容1,0行内容2,0行内容3......},{1行内容1,1行内容2,1行内容3....}.......};
		  int[,] arr3 = new int[3,3]{ {00,01,02},
		                              {10,11,12},
		  							  {20,21,22} };
		4.变量类型[,]  二维数组变量名 = new 变量类型[ , ]{{0行内容1,0行内容2,0行内容3......},{1行内容1,1行内容2,1行内容3....}.......};
		  int[,] arr4 = new int[,]{ {00,01,02},
		  						    {10,11,12},
		  						    {20,21,22} };
		5.变量类型[,]  二维数组变量名 = {{0行内容1,0行内容2,0行内容3......},{1行内容1,1行内容2,1行内容3....}.......};
		  int[,] arr5 = { {00,01,02},
		  			      {10,11,12},
		  				  {20,21,22} };

3.二维数组的使用

1.二维数组长度(数组变量名.GetLength())

 int[,] array = new int[,] { { 1,2,3},
                             { 4,5,6} };
//我们要获取行和列分别是多长
//得到多少行
Console.WriteLine(array.GetLength(0));//打印结果:2
//得到多少列
Console.WriteLine(array.GetLength(1));//打印结果:3

2.获取二维数组中的元素(数组变量名[行索引下标,列索引下标])

注意:第一个元素的索引是0,最后一个元素的索引肯定是长度-1
//2.获取二维数组中的元素(数组变量名[行索引下标,列索引下标])
Console.WriteLine(array[0,1]);//打印结果:2
Console.WriteLine(array[1,2]);//打印结果:6
//Console.WriteLine(array[3,3]);//报错:

3.修改二维数组中的元素

array[0,0]=99;//类型要统一
Console.WriteLine(array[0,0]);//打印结果:99

4.遍历二维数组

通过循环快速获取二维数组中的每一个元素
 for (int i = 0; i < array.GetLength(0); i++)
 {
      for (int j = 0; j < array.GetLength(1); j++)
      {
           Console.WriteLine(array[i,j]);
      }
  }

5.增加二维数组元素

数组初始化以后是不能够直接添加新的元素的,要增加元素需要声明更大空间的数组,然后把原有元素复制过去(原数组依旧存在),再让其指向原数组地址的指向新数组地址
二维数组只能一行一行或者一列一列的加
	//开辟更大空间数组
	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只是用于指向数组地址的
     //赋值检测
      array[2, 0] = 7;
      array[2, 1] = 8;
      array[2, 2] = 9;
      for (int i = 0; i < array.GetLength(0); i++)
      {
           for (int j = 0; j < array.GetLength(1); j++)
           {
               Console.WriteLine(array[i, j]);
           }
      }
     //打印结果:99,2,3,4,5,6,7,8,9

6.删除数组元素

数组初始化以后是不能够直接删除元素的,要删除的话,原理同上面的增加
注意:将原数组数值复制过来时,循环内长度为新数组长度,否则会造成溢出(新数组长度小于原数组长度)
二维数组只能一行一行或者一列一列的删除
 int[,] array3 = new int[3, 2];
 //将原数组数值复制过来时,循环内长度为新数组长度
  for (int i = 0; i < array3.GetLength(0); i++)
 {
      for (int j = 0; j < array3.GetLength(1); j++)
      {
          array3[i, j] = array[i, j];
      }
  }
  //指向原数组地址的数组指向新数组地址
  array = array3;
  //获取数组行长度
   Console.WriteLine(array.GetLength(0));
   //获取数组列长度
   Console.WriteLine(array.GetLength(1));
  //打印结果:3,2

7.查找数组元素

如果要在数组中查找个元素是否等于某个值
通过遍历的形式去查找
int a = 2;
 for (int i = 0; i < array.GetLength(0); i++)
 {
      for (int j = 0; j < array.GetLength(1); j++)
      {
          if(a==array[i,j])
     	{
         Console.WriteLine("和{0}相等的元素在数组第{1}行,第{2}列位置",a, i+1,j+1);
         break;
      	}
      }
 }

  //打印结果:和2相等的元素在数组第1行,第2列位置

8.总结

1.概念:二维数组是同一变量类型的  行列数据集合
2:一定要掌握的知识:声明,遍历,增删查改
3:所有的变量类型都可以声明为二维数组
4:游戏中一般用来存储矩阵,在控制台小游戏中可以用二维数组来表示地图格子

4.二维数组练习题

1.练习题一

将1到10000赋值给一个二维数组(100行100列)
            int[,] array = new int[100,100];
            int index = 1;
            for (int i = 0; i < array.GetLength(0); i++)
            {
            	for (int j = 0; j < array.GetLength(1); j++)
            	{
                	array[i,j] = index;
                	++index;
                }
            }

2.练习题二

将二维数组(4行4列)的右上半部分置零(元素随机1~100)

Unity基础之C#基础篇笔记2:复杂数据类型(二维数组,交错数组)_第1张图片

            int[,] array2 = new int[4, 4];
            Random r = new Random();
            for (int i = 0; i < array2.GetLength(0); i++)
            {
                for (int j = 0; j < array2.GetLength(1); j++)
                {
                    if (i < 2 && j > 1)
                        array2[i, j] = 0;
                    else
                        array2[i, j] = r.Next(0,101);
                    Console.Write(array2[i, j] + " ");
                }
                Console.WriteLine();
            }

3.练习题三

求二维数组(3行3列)的对角线元素的和(元素随机1~10)

Unity基础之C#基础篇笔记2:复杂数据类型(二维数组,交错数组)_第2张图片

            int[,] array3 = new int[3, 3];
            Random r = new Random();
            int sum = 0;
            for (int i = 0; i < array3.GetLength(0); i++)
            {
                for (int j = 0; j < array3.GetLength(1); j++)
                {
                    array3[i, j] = r.Next(1,11);
                    if (i == j || i + j == 2)
                        sum += array3[i, j];
                    Console.Write(array3[i, j] + "  ");
                }
                Console.WriteLine();
            }
            Console.WriteLine(sum);

4.练习题四

求二维数组(5行5列)中最来元紊值及其行列号(元素随机1~500)
            int[,] array4 = new int[5, 5];
            Random r = new Random();
            int maxI = 0;
            int maxJ = 0;
            for (int i = 0; i < array4.GetLength(0); i++)
            {
                for (int j = 0; j < array4.GetLength(1); j++)
                {
                    array4[i, j] = r.Next(1,501);
                    if(array4[maxI,maxJ]<array4[i,j])
                    {
                        maxI = i;
                        maxJ = j;
                    }
                    Console.Write(array4[i, j] + "  ");
                }
                Console.WriteLine();
            }
            Console.WriteLine("最大值为{0},该数在第{1}行第{2}列", array4[maxI, maxJ], maxI+1, maxJ+1);

5.练习题五

给一个M*N的二维数组,数组元紊的值为0或者
要求转换数组,将含有1的行和列的值全部置为1

Unity基础之C#基础篇笔记2:复杂数据类型(二维数组,交错数组)_第3张图片

            int mIndex = 0;
            int nIndex = 0;
            try
            {
                Console.WriteLine("请输入行数(非零数)");
                mIndex = int.Parse( Console.ReadLine());
                Console.WriteLine("请输入列数(非零数)");
                nIndex = int.Parse(Console.ReadLine());
            }
            catch (Exception)
            {
                Console.WriteLine("请输入数字");
            }
            
            int[,] array5 = new int[mIndex, nIndex];
            Random r = new Random();
            
            bool[] hang = new bool[mIndex];//行标识
            bool[] lie = new bool[nIndex];//列标识

            for (int i = 0; i < array5.GetLength(0); i++)
            {
                for (int j = 0; j < array5.GetLength(1); j++)
                {
                    array5[i, j] = r.Next(0,2);
                    if (array5[i, j] == 1)
                    {
                        //记录当前行列是否要变1的标识
                        //要变1就为true
                        hang[i] = true;
                        lie[j] = true;
                    }
                    Console.Write(array5[i, j] + "  ");
                }
                Console.WriteLine();
            }
            Console.WriteLine("*******分割线*******");
            for (int i = 0; i < array5.GetLength(0); i++)
            {
                for (int j = 0; j < array5.GetLength(1); j++)
                {
                    //满足行列标识为true  变1
                    if(hang[i]||lie[j])
                    {
                        array5[i, j] = 1;
                    }
                    Console.Write(array5[i, j] + "  ");
                }
                Console.WriteLine();
            }        

交错数组

1.基本概念

交错数组是数组的数组,每个维度的数量可以不同
注意:二维数组的每行的列数相同,交错数组每行的列数可能不同

2.数组的声明

1.变量类型[][] 交错数组名;
	int[][] arr1;
2.变量类型[][]  交错数组名 = new   交错数组名[行][];
	int[][] arr2 = new int[3][];
3.变量类型[][]  交错数组名 = new   交错数组名[行][]{{一维数组1,一维数组2,.......};
	int[][] arr3 = new int[3][]{ new int[] {00,01,02},
	                             new int[] {10,11},
	 						     new int[] {20} };
4.变量类型[][]  交错数组名 = new   交错数组名[][]{{一维数组1,一维数组2,.......};
	int[][] arr4 = new int[][]{ new int[] {00,01,02},
	                            new int[] {10,11},
	 						    new int[] {20} };
5.变量类型[][]  交错数组名 = {{一维数组1,一维数组2,.......};
		 int[][] arr5 = { new int[] {00,01,02},
	                      new int[] {10,11},
	 					  new int[] {20} };

3.交错数组的使用

1.交错数组长度

 int[][] array = { new int[] { 1, 2, 3 },
                   new int[] { 4,5 } };
//我们要获取行和列分别是多长
//得到多少行
Console.WriteLine(array.GetLength(0));//打印结果:2
//得到某一行的列数
Console.WriteLine(array[0].Length);//打印结果:3

2.获取交错数组中的元素

注意:不要越界
//2.获取交错数组中的元素(数组变量名[行索引下标][列索引下标])
Console.WriteLine(array[0][1]);//打印结果:2
Console.WriteLine(array[1][1]);//打印结果:5
//Console.WriteLine(array[3][3]);//报错:

3.修改交错数组中的元素

array[0][1]=99;//类型要统一
Console.WriteLine(array[0][1]);//打印结果:99

4.遍历交错数组

通过循环快速获取交错数组中的每一个元素
 for (int i = 0; i < array.GetLength(0); i++)
 {
      for (int j = 0; j < array[i].Length; j++)
      {
           Console.WriteLine(array[i][j] + " ");
      }
      Console.WriteLine();
  }
  //打印结果:1 99 3 4 5

5.增加交错数组元素

	        //开辟更大空间数组
            int[][] array2 = new int[3][];
            for (int i = 0; i < array.GetLength(0); i++)
            {
            	//声明临时数组存储原交错数组每一行值,赋予给新交错数组
                int[] array3 = new int[array[i].Length];
                for (int j = 0; j < array[i].Length; j++)
                {
                    //Console.Write(array[i][j] + " ");
                    array3[j]= array[i][j];
                }
                array2[i] = array3;
            }
            //指向原数组地址的数组指向新数组地址
            array = array2;//array只是用于指向数组地址的
            //赋值检测
            array[2] = new int[] { 1, 2, 3 };
            for (int i = 0; i < array.GetLength(0); i++)
            {
                for (int j = 0; j < array[i].Length; j++)
                {
                    Console.Write(array[i][j]+" ");
                }
                Console.WriteLine();
            }
            //打印结果:1  99 3
            //          4  5
            //          1  2  3

6.删除数组元素

            int[][] array4 = new int[2][];
            for (int i = 0;  i<array4.GetLength(0); i++)
            {
            //声明临时数组存储原交错数组每一行值,赋予给新交错数组
                int[] array3 = new int[array[i].Length];
                for (int j = 0; j < array[i].Length; j++)
                {
                    array3[j] = array[i][j];
                }
                array4[i] = array3;
            }
            array = array4;
            for (int i = 0; i < array.GetLength(0); i++)
            {
                for (int j = 0; j < array[i].Length; j++)
                {
                    Console.Write(array[i][j] + " ");
                }
                Console.WriteLine();
            }
            //打印结果:1  99 3
            //          4  5

7.查找数组元素

如果要在数组中查找个元素是否等于某个值
通过遍历的形式去查找
            int a = 99;
            for (int i = 0; i < array.GetLength(0); i++)
            {
                for (int j = 0; j < array[i].Length; j++)
                {
                    if(array[i][j]==a)
                    {
                        Console.Write("和{0}相等的元素在数组第{1}行,第{2}列位置", a, i + 1, j + 1);
                    }
                }
                Console.WriteLine();
            }
  //打印结果:和99相等的元素在数组第1行,第2列位置

你可能感兴趣的:(unity基础之c#基础笔记)