• 多维数组和交错数组笔记


    1.) 关于数据的几个概念:

    Rank,即数组的维数,其值是数组类型的方括号之间逗号个数加上1。

    Demo:利用一维数组显示斐波那契数列F(n) = F(n-1) + F(n-2) (n >=2 ),每行显示5项,20项.

    1. static void Main(string[] args)
    2. {
    3.     int[] F = new int[20];
    4.     F[0] = 1;F[1] = 1;
    5.     //计算斐波那契数列每个元素值
    6.     for (int i = 2; i < F.Length; i++) F[i] = F[i - 1] + F[i - 2];
    7.     //循环显示斐波那契数列,每行显示5个
    8.     for (int i = 0; i < F.Length; i++)
    9.     {
    10.         //换行
    11.         if (i >0 && i % 5  == 0)
    12.             Console.Write("\n");
    13.         Console.Write(F[i].ToString().PadLeft(6, ' '));
    14.     }
    15.     Console.ReadKey();
    16. }

    2).多维数组

    声明多维数组时,用逗号表示维数,一个逗号表示两维数组,两个逗号表示三维数组,以此类推。注意:在声明数组声明中即使没有指定维数的实际大小,也必须使用逗号分隔各个维,如:

    //声明一个42列的二维数组

    int[,] myArray = new int[4, 2];

    //声明一个3页,5行,2列的3维数组

    int[,,] myArray_3 = new int[3, 5, 2];

    编程形成并显示4行4列的二维矩形数组

    1. //生成一个4*4的u矩阵
    2. int[,] myMatrix = new int[4, 4];
    3. int value = 0;
    4. for (int r = 0; r < myMatrix.GetLength(0); r++)
    5. {
    6.     for (int c = 0; c < myMatrix.GetLength(1); c++)
    7.     {
    8.         myMatrix[r, c] = value++;
    9.         Console.Write(value + "\t");
    10.         if (value % 4 == 0)
    11.             Console.Write("\n");
    12.     }
    13. }

    3.)交错数组(jagged array):

    数值数组元素的默认值设置为零,而引用元素的默认值设置为 null。

    交错数组是数组的数组,因此,它的元素是引用类型,初始化为 null

    交错数组元素的维度和大小可以不同,需要声明、实例化并且初始化后才能使用

    1. //定义一个交错数组,有3个元素,然后再给三个元素分别赋值(一维数组)
    2. int[][] myJaggedArray = new int[3][];
    3. myJaggedArray[0] = new int[]{ 1,2,3,4};
    4. myJaggedArray[1] = new int[] { 4, 5,};
    5. myJaggedArray[2] = new int[] { 6, 7, 8 };
    6. //定义一个交错数组,有3个元素,声明交错数组时初始化一维交错数组的每个元素对应的一维数组
    7. int[][] myJaggedArray2 = new int[3][]
    8. {
    9.     new int[]{1,2,3,4},
    10.     new int[]{4,5},
    11.     new int[]{6,7,8},
    12. };
    13. //循环取出交错数组的所有元素并显示出来
    14. for (int r = 0; r < myJaggedArray2.Length; r++)
    15. {
    16.     //myJaggedArray2[r]元素为一维数组,用Leng属性或GetLeng()方法获取数组长度
    17.     //对于一维数组GetLength(0)和GetLength(),返回结果一样
    18.     for (int c = 0; c < myJaggedArray2[r].GetLength(0); c++)
    19.     {
    20.         Console.Write(myJaggedArray2[r][c] + "\t");
    21.     }
    22.     Console.WriteLine();
    23. }
    24. Console.WriteLine("------------------------------");
    25.            
    26. //声明一个一维交错数组,其元素为大小不同的二维数组
    27. int[][,] myJaggedArray3 = new int[3][,]
    28. {
    29.     new int[2,3]{{1,2,3},{4,5,6}},
    30.     new int[,]{{11,12},{13,14}},
    31.     new int[,]{{21,22},{ 23, 24},{ 25, 26},{27,28}},
    32. };
    33. //循环取出交错数组的所有元素并显示出来
    34. for (int r = 0; r < myJaggedArray3.Length; r++)
    35. {
    36.     //myJaggedArray3[r].GetLength(0)返回一维交错数组第r个元素的0维数组长度,即元素数组的行
    37.     for (int j = 0; j < myJaggedArray3[r].GetLength(0); j++)
    38.     {
    39.         //myJaggedArray3[r].GetLength(1)返回一维交错数组第r个元素的1维数组长度,即元素数组的列
    40.         for (int k = 0; k < myJaggedArray3[r].GetLength(1); k++)
    41.         {
    42.             Console.Write(myJaggedArray3[r][j, k] + "\t");
    43.         }
    44.         Console.WriteLine();
    45.     }
    46.     Console.WriteLine();
    47. }

    4.) 数组的基本操作和排序

    数据常用操作:数组求和、求平均值、最值及其位置

    Array类的常用操作:

    Array.clear(数组名,起始元素,元素个数)

    Array.Copy(源数组,目标数组,要复制的元素个数);

    Array.Copy(源数组,目标数组,目标起始索引,要复制的元素个数);

    Array.Reserve(数组名)

    Array.Reserve(数组名,起始索引,元素个数)

    Array.Sort(数组名)

    数组对象的常用操作:

    Clone(),CopyTo(),getLength(),GetLowerBound(), GetUpperBound()等方法

    Leng,Rank等属性.

    数组的常见排序方法,

    冒泡法(bubble sort)、选择法(SelectSort);

    以10个元素的一维数组升序排序为例,说明冒泡法排序:

    将第一个元素与第二个元素比较,如果元素1>元素2,则交换顺序,然后依次每个元素与后面的一个元素比较,大的值往后移,直到9,10元素比较完,第一轮冒泡比较结束

    然后开始第二轮,从第二个元素与相邻后面的元素比较,直到比较第8,9元素,

    以此类推,比较10-1=9次,就完成了冒泡法升序排列.

    选择法就是依次循环选择出最小值,从前往后依次放在的指定位置即可,不再多叙.

    题外话,忽然发现C#数组可以这么定义,不报错,神奇,,,

    int[ ]  nums = new[ ] { 1, 2,3,4 };

  • 相关阅读:
    JAVA应用服务器如何快速定位CPU问题
    OpenSSL自签名证书
    1920: 【C2】【字符串】调换位置
    【升级U8+】为视图或函数 ‘Ap_DetailVend‘ 指定的列名比其定义中的列多。
    毕业三年跳槽八次,换来惨痛的后果,资深架构师给出的一些建议!
    基于python的药店药品信息管理系统-毕业设计-课程设计
    需要在js中避免的几个常见错误
    vue video播放m3u8源
    单标签下的日间/黑夜模式切换按钮效果
    论文精读:YOLOv4: Optimal Speed and Accuracy of Object Detection
  • 原文地址:https://blog.csdn.net/weixin_44279482/article/details/137071407