• C#数组初始化


    C#的数组初始化是在声明数组时将初始值放在大括号({})之内。如果没有指定初始值,则数组成员将自动初始化为该数组类型的默认初始值。请阅读数组的属性。如果将数组声明为某类型的字段,则当实例化该类型时它将被设置为默认值null。

    一、一维数组的初始化

    1. 在声明数组时将其初始化。如:

    int[] array = new int[6]{1,2,3,4,5,6};
    string[] stringArray = new string[3]{"string1", "string2", "string3"};2. 可以省略数组的大小。如:

    int[] array = new int[]{1,2,3,4,5,6};
    string[] stringArray = new string[]{"string1", "string2", "string3"};3. 如果提供了初始值设定项,还可以省略new运算符。如:

    int[] array = {1,2,3,4,5,6};
    string[] stringArray = {"string1", "string2", "string3"};4. 声明一个数组变量但不将其初始化,等到将数组分配给此变量时必须使用new运算符。如:

    int[] array;
    array = new int[]{1,2,3,4,5};
    string[] stringArray;
    stringArray = new string[]{"string1", "string2", "string3"};二、多维数组的初始化

    1. 声明数组时将其初始化。如:

    int[,] array2D = new int[,]{{1,2},{3,4},{5,6}};     // 二维数组
    int[,,] array3D = new int[,,]{{{1,2,3}},{{4,5,6}}}; // 三维数组对于二维数组array2D来说,这是一个3行2列的二维数组。3行分别是{1,2}、{3,4}和{5,6}这三行,每一行都用大括号{}括起来,第1行{1,2}用0表示,第2行{3,4}用1表示,第3行{5,6}用2表示。

    每一行大括号内表示的是列,对于array2D来说,每一行都是2列,用0、1表示。那么这个数组就是3行2列。

    那么array2D的第3行2列的元素就是array2D[2][1]=6。

    二维数组就是一个二维的矩阵,只有x,y两个维度,好像一个平面,用strArr[x,y]可以定位到矩阵中的任何一个元素。遍历二维的矩阵一般需要两层循环。

    在这里,再举几个三维数组的例子:

    int[,,] array3D = new int[,,]{
                                     {{1,2,3,4},{5,6,7,8},{9,10,11,12}},
                                     {{13,14,15,16},{17,18,19,20},{21,22,23,24}}
                                 };
    相当于int[2,3,4]。

    ?第一维是4:指的是最里层大括号({})内的4个元素。分别是1,2,3,4或者5,,6,7,8。

    ?第二维是3:指的是第二层内三个大括号部分。分别是{1,2,3,4}、{5,6,7,8}和{9,10,11,12}部分。

    ?第三维是2:指的是第一层内两个大括号部分。分别是{{1,2,3,4},{5,6,7,8},{9,10,11,12}}和{{13,14,15,16},{17,18,19,20},{21,22,23,24}}。
    int[,,] array3D = new int[,,]{{{1,2,3}},{{4,5,6}},{{7,8,9}}};相当于int[3,1,3]。

    int[,,] array3D = new int[,,]{{{1},{2},{3}},{{4},{5},{6}},{{7},{8},{9}}};相当于int[3,3,1]。

    int[,,] array3D = new int[,,]{{{1,2,3},{4,5,6},{7,8,9}}};相当于int[1,3,3]。

    三维数组有三个维度,好像一个立方体,需要用strArr[x,y,z]才能定位到矩阵中的元素,因此,如果需要遍历,必须使用三个嵌套的循环。

    一个简单的覆盖三维矩阵的例子是:

    for(int i=0; i<x; i++)
    {
        for(int j=0; j<y; j++)
        {
            for(int k=0; k<z; k++)
            {
                Console.WriteLine(strArr[i, j, k]);
            }
        }
    }

    2. 初始化数组时不需要指定级别。如:

    int[,] array2D = {{1,2},{3,4},{5,6}};3. 声明一个数组变量但不将其初始化,等到将数组分配给此变量时必须使用new运算符。如:

    int[,] array2D;
    array2D = new int[,]{{1,2},{3,4},{5,6}};4. 将数组变量初始化为默认值(交错数组除外)。如:

    int[,] array = new int[2,3];5. 可以给数组的元素赋值。如:

    array[3,4] = 10;

    三、交错数组的初始化

    1. 声明一个一维数组,数组中的5个元素都是一维整数数组:

    int[][] jiaoArray = new int[5][];初始化jiaoArray数组的元素:

    jiaoArray[0] = new int[10];
    jiaoArray[1] = new int[9];
    jiaoArray[2] = new int[8];
    jiaoArray[3] = new int[7];
    jiaoArray[4] = new int[6];元素初始化以后就可以使用了。

    2. 使用初始值设定项将值填充给数组元素,此时不需要设置数组大小。如:
     
    jiaoArray[0] = new int[]{1,2,3,4,5}; // 初始化数组第一个元素:5个整数组成的数组
    jiaoArray[1] = new int[]{2,4,6,8};   // 初始化数组第二个元素:4个整数组成的数组
    jiaoArray[2] = new int[]{1,3,5};     // 初始化数组第三个元素:3个整数组成的数组

    3. 声明数组时进行初始化。如:

    int[][] jiaoArray = new int[][]
    {
        new int[]{1,2,3,4,5},
        new int[]{2,4,6,8},
        new int[]{1,3,5}
    };

    4. 可以使用下面的格式:

    int[][] jiaoArray =
    {
        new int[]{1,2,3,4,5},
        new int[]{2,4,6,8},
        new int[]{1,3,5}
    };

    5. 交错数组的元素是引用类型,初始化为null。我们可以访问个别数组元素:

    jiaoArray[0][1] = 5;  // 将5赋给第1个数组[0]的第2个元素[1]
    jiaoArray[3][2] = 7;  // 将7赋给第4个数组[3]的第3个元素[2]

    6. 可以混合使用交错数组和多维数组。下面声明和初始化一个一维交错数组,该数组包含大小不同的二维数组元素:

    int[][,] jiaoArray = new int[3][,]
    {
        new int[,]{{1,2},{3,4}},
        new int[,]{{11,22},{33,44},{55,66}},
        new int[,]{{111,222},{333,444},{555,666}}
    };

    我们可以访问个别元素,下面的例子显示第一个数组的元素[1,0]的值3:

    Console.WriteLine("{0}",jiaoArray[0][1,0]);Length方法返回包含在交错数组中的数组的个数。

    Console.WriteLine(jiaoArray.Length);  // 返回值3

    四、示例

    示例一
     
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;

    namespace Test
    {
        class Program
        {
            static void Main(string[] args)
            {
                // C#交错数组的初始化-www.baike369.com
                // 交错数组:声明一个2个元素的一维数组,数组中的元素都是一维整数数组
                int[][] array = new int[2][];
                array[0] = new int[4] { 1, 2, 3, 4 }; // 初始化数组的元素
                array[1] = new int[5] { 0, 2, 4, 6, 8 }; // 初始化数组的元素
                for (int i = 0; i < array.Length; i++)
                {
                    Console.Write("元素({0}):", i);// 显示交错数组的元素
                    //显示交错数组中的每一个元素的值,这个值是一个一维整数数组
                    for (int j = 0; j < array[i].Length; j++)
                    {
                        Console.Write("{0}{1}", array[i][j],
                            j==(array[i].Length-1)?"":" ");
                    }
                    Console.WriteLine(""); // 将每一个交错数组的元素换行
                }
                Console.ReadLine();
            }
        }
    }

    运行结果:
     
    元素(0):1 2 3 4
    元素(1):0 2 4 6 8其中

    j==(array[i].Length-1)?"":" "将交错数组中的元素的值,即一维整数数组的元素之间添加空格。请阅读C#条件运算符(?:)。

    示例二
      
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;

    namespace Test
    {
        class Program
        {
            static void Main(string[] args)
            {
                // 二维数组
                int[,] array = { { 1, 2 }, { 3, 4 }, { 5, 6 }, { 7, 8 } };
                int array1 = array[3, 1];
                // 三维数组
                int[, ,] array3D = new int[,,]{
                    {{1,2,3,4},{5,6,7,8},{9,10,11,12}},
                    {{13,14,15,16},{17,18,19,20},{21,22,23,24}}
                    };
                int array2 = array3D[1, 2, 3];
                Console.WriteLine("array[3,1](二维数组):{0}", array1);
                Console.WriteLine("array3D[1,2,3](三维数组):{0}", array2);
                Console.ReadLine();
            }
        }
    }

    运行结果:
     
    array[3,1](二维数组):8
    array3D[1,2,3](三维数组):24

  • 相关阅读:
    Bayan 2015 Contest Warm Up D. CGCDSSQ 暴力
    Codeforces Round #361 (Div. 2) D. Friends and Subsequences RMQ+二分
    Educational Codeforces Round 21 D. Array Division 前缀和
    Educational Codeforces Round 23 E. Choosing The Commander Trie
    Educational Codeforces Round 23 D. Imbalanced Array 单调栈
    Codeforces Round #421 (Div. 1) B. Mister B and PR Shifts 模拟
    Educational Codeforces Round 24 E. Card Game Again 二分+线段树
    Educational Codeforces Round 25 E. Minimal Labels 优先队列
    Codeforces Round #426 (Div. 1) B. The Bakery DP+线段树
    Codeforces Round #407 (Div. 1) C. The Great Mixing 背包DP+Bitset
  • 原文地址:https://www.cnblogs.com/melao2006/p/4241653.html
Copyright © 2020-2023  润新知