把二维数组转化为一维数组的代码

作者:哈哈小脸 | 创建时间: 2023-04-22
在c#把二维数组转化为一维数组的代码,本人上机,成功实践,供大家参考。...
把二维数组转化为一维数组的代码

操作方法

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleApplicationArray_二维数组排序 { class Program { static void Main(string[] args) { //任务:将一个二维数组按某一指定的列排序,其它项跟着整体移动 //创建一个产生随机数的类的对象random Random random = new Random(); //创建一个5*4的二维整形数组 int[,] myarray = new int[5, 4]; //给二维数组赋值,同时编历数组 for (int i = 0; i < myarray.GetLength(0); i++) { for (int j = 0; j < myarray.GetLength(1); j++) { myarray[i, j] = random.Next(50, 99); Console.Write(" {0},", myarray[i, j]); } Console.WriteLine("\n___________________\n"); } // 调用方法    因为该方法具有返回值,所以声明与返回值类型相同的变量(一维数组arr_2)来接收 int[] arr_2 = Program.GetRostArray(myarray); //编历一维数组arr_2 ,它的作用是将二维数组myarray转化为一维数组arr_2 for (int i = 0; i < arr_2.Length; i++) { Console.Write(" {0},", arr_2[i]); } Console.WriteLine("提出二维数组第二列的元素"); //声明一个一维数组arr_3,它有5个元素,分别把一维数组arr_2的第1项,第5项,第9项,第13项,第17项的元素值赋给它们。 int[] arr_3 = new int[5]; //利用for循环来赋值 for (int i = 0; i < arr_3.Length; i++) { //分别把一维数组arr_2的第1项,第5项,第9项,第13项,第17项的元素值赋给它们。 //下面的通式能实现赋值要求 arr_3[i] = arr_2[4 * i + 1]; Console.Write("{0},", arr_3[i]); } Console.WriteLine("\n将二维数组myarray按第二例升序排列,其它跟随移动"); //一般来说,都是利用嵌套式for循环来实现排序功能 //一般来说,对于一个具有n个元素的一维数组,要实现升序或降序排列,则要必须让每两个元素都比较一次 //符合了从n个数中取2个进行组合的数组组合方法。共c(n,m)=p(n,m)/m!=n!/((n-m)!*m!)次; /* 外循环,它功能是: i=0时,比出一个最大的数,通过交换位置后,它被换到最后面,即倒数第一个 i=1时,比出一个第二大的数,通过交换位置后,它被换到倒数第二个 依此类推 ............ i=arr_3.Length-1时,比出一个最小的数,通过交换位置后,它被换到最前面,即第1位。 */ for (int i = 0; i < arr_3.Length - 1; i++) { /* 内循环的功能是: 1.始终将前后相连的两个数进行比较。 2.升序排列:每一次比较结果,小的数总是换到相连位的前面,大的数总是要换到相连位的后位。 3.接着这个后面的数(即它已经跟它的前一位比较过),再跟的后一位比较,此时它是2中的前位。 4.第j位和第j+1位比较:j自增1,位就自增1位,结果:比完一轮,有一个较大的数就被换到后尾去了。 */ for (int j = 0; j < arr_3.Length - 1 - i; j++) { //声明5个变量,相当于“空鸟笼”。 int min0; int min1; int min2; int min3; int min4; //对于arr_3这个一维数组,如果前面一项大于后面一项,则元素值要按下面规定换位 if (arr_3[j] > arr_3[j + 1]) { /* 这一步太关键了!!下面代码俗称“换鸟笼”。 “换鸟笼”原理:两个鸟要交换鸟笼,先得找一个空的鸟笼,先把a鸟装进空鸟笼,然后把b鸟装进a的鸟笼,最后把a鸟装进b鸟笼。 */ //要换位的前提条件是:前一项大于后一项 min4 = arr_3[j];           //把arr_3[j]中的元素值赋给min4,即把a鸟装进空鸟笼 arr_3[j] = arr_3[j + 1];   //把arr_3[j+1]中的元素值赋给arr_3[j],即把b鸟装进a鸟笼 arr_3[j + 1] = min4;       //把min4中的值赋给arr_3[j+1],即把a鸟装进b鸟笼。 //对于一个一维数组来说,前面的元素向后换一位,意味着: //它关联的二维数组的各项就要向后换一行。 //这是j行与j+1行,0列的换位 min0 = myarray[j, 0]; myarray[j, 0] = myarray[j + 1, 0]; myarray[j + 1, 0] = min0; //这是j行与j+1行,1列的换位 min1 = myarray[j, 1]; myarray[j, 1] = myarray[j + 1, 1]; myarray[j + 1, 1] = min1; //这是j行与j+1行,2列的换位 min2 = myarray[j, 2]; myarray[j, 2] = myarray[j + 1, 2]; myarray[j + 1, 2] = min2; //这是j行与j+1行,3列的换位 min3 = myarray[j, 3]; myarray[j, 3] = myarray[j + 1, 3]; myarray[j + 1, 3] = min3; } } } //重新编历二维数组 Console.WriteLine("重新编历二维数组"); for (int i = 0; i < myarray.GetLength(0); i++) { for (int j = 0; j < myarray.GetLength(1); j++) { Console.Write(" {0},", myarray[i, j]); } Console.WriteLine("\n----------------\n"); } Console.ReadKey(); } /// <summary> /// 创建一个方法:它能将二维数组转化一维数组 /// </summary> /// <param name="myarray">传入一个二维数组</param> /// <returns>返回一个一维数组</returns> public static int[] GetRostArray(int[,] myarray) { //声明一个一维数组arr,它的长度=(二维数组myarray)第一维长度*第二维长度,即5*4=20个元素 int[] arr = new int[myarray.GetLength(0) * myarray.GetLength(1)]; //利用for循环来实现转化 //外循环,实现第一维自增 for (int i = 0; i < myarray.GetLength(0); i++) { //内循环,实现第二维自增 for (int j = 0; j < myarray.GetLength(1); j++) { //二维转化为一维的通式,一维数组下标与二维数组下标符合这个公式 arr[myarray.GetLength(1) * i + j] = myarray[i, j]; } } //返回一维数组arr return arr; } } }

点击展开全文

更多推荐