• C#编程(三十二)----------数组基础


    数组

    如果需要使用同一类型的多个对象,就可以使用数组.数组是一种数据结构,他可以包含同一类型的多个元素.

    数组的声明

    在声明数组时,应先定义数组中元素的类型,其后是一对方括号核一遍变量名.例如:生命一个包含整型元素的数组:

    int [] array;

    数组的初始化

    声明了数组后就必须为数组分配内存,以保存数组的所有元素.数组是引用类型,所以必须给它分配堆上的内存.为此,应使用new运算符,制定数组中元素的类型和数量来初始化数组的变量.下面制定了数组的大小.

    array=new int[4];

    在声明和初始化完数组后,变量array就引用了4个整型值,它们位于托管堆上:

    指定数组的大小后,如果不复制数组中的所有元素,就不能重新设置数组的大小,如果事先不知道数组中应包含多少个元素,就可以使用集合.

    声明和初始化的简化操作: int [] array=new int[4];

    还可以使用数组初始化器维数组的每个元素赋值.数组初始化器只能在声明数组变量时使用,不能在声明数组之后使用.

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

    如果用花括号吃书画数组,则还可以不指定数组的大小,因为编译器会自动识别统计元素的个数:

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

    更简单的办法:

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

    访问数组元素

    在声明和初始化数组后,就可以使用索引器访问其中的元素了.数组只支持有整型参数的索引器.

    通过所以其传递元素编号,就可以访问数组.索引器总是以0开头.表示第一个元素.可以传递给索引器的最大值是元素的个数减一,因为索引器从0开始.

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

    int v1=array[0];

    int v2=array[1];

    array[3]=44;

    Console.WriteLine(arrar[4])//这里会出错.

    如果使用错误的索引器值(其中不存在对应的元素),就会抛出IndexOutOfRangeException异常.

    如果不知道数组中的元素个数,可以在for语句中使用Length属性:

    for ( int i=0;i<array.Length;++i)

    {

    Console.WriteLine(arrray[i])

    }

    除了使用for语句之外也可以使用foreach语句: foreach(var item in array)

    {

    Console.WriteLine(item);

    }

    使用引用类型

    除了能声明预定义的数组,还可以声明自定义的数组.

    public class Person

        {

            public string FirstName { get; set; }

            public string LastName { get; set; }

            public override string ToString()

            {

                return string.Format("{0},{1}", FirstName, LastName); ;

            }

    }

    生命一个包含两个Person元素的数组与生命一个int数组类似:

    Person[] p = new Person[2];

    注意:如果数组中的元素是引用类型,就必须为每个数组元素分配内存.若使用了数组中未分配内存的元素,就会抛出NullReferenceException类型的异常.

    使用从0开始的索引器,可以为数组的每个元素分配内存.:

    p[0] = new Person { FirstName = "hahaha", LastName = "heiheihei" };

    p[1] = new Person { FirstName = "hehehe", LastName = "gagaga" };

    该图显示了Person数组中的对象在托管堆中的情况.myPerson是存储在栈上的一个变量,该变量引用了存储在托管堆上的Person元素对应的额数组.这个数组有足够容乃两个引用的空间.数组中的每一项都引用了一个Person对象,而这些Person对象也存储在托管堆上.

    int类型一样,也可以对自定义类型使用数组初始化器:

    Person [] p=

    {

    new Person { FirstName = "hehehe", LastName = "gagaga" };

    new Person { FirstName = "hahaha", LastName = "heiheihei" };

    }

    多维数组

    一般数组(也称为一位数组)用一个整数来索引.多维数组用两个或多个整数来索引.

    C#中声明二维数组,需要在方括号中加上一个逗号.数组在初始化时应制定每一维的大小(也称为阶).接着,就可以使用两个整数作为索引器来访问数组中的元素:

    int[,]array=new int [1,1];

    array[0, 0] = 1;

    array[0, 1] = 2;

    array[1, 0] = 3;

    array[1, 1] = 4;

    声明数组之后,就不能修改其阶数了.

    如果事先知道元素的值,则可以使用数组索引器来初始化二维数组.在初始化数组时,使用一个外层的花括号,每一行用包含在外层花括号中的内层花括号来初始化.

    int[,] array = {

         {1,2,3},

         {4,5,6},

         {7,8,9}

    };

    使用数组初始化器时,必须初始化数组的每个元素,不能泄露任何元素.

    在花括号中使用两个逗号,就可以生命一个三维数组:

    int[, ,] array ={

                                  {{1,2},{3,4}},

                                  {{5,6},{7,8}},

                                  {{9,10},{11,12}}

                              };

                Console.WriteLine(array[0,1,1]);

                Console.ReadKey();

    锯齿数组

    可以看出,二维数组对应于一个矩形,锯齿数组比较灵活,在锯齿数组中,每一行都可以有不同的大小.

    在声明锯齿数组时,要一次放置左右括号.在初始化锯齿数组时,只有第一队方括号中设置该数组包含的行数.定义各行中元素个数的第二个方括号设置为空,因为这类数组的每一行

    包含不同的元素个数.之后,为每一行指定行中的元素个数:

        int[][] array = new int[3][];

                array[0] = new int[2] { 1,2};

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

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

    迭代锯齿数组中的所有元素:

    for (int row = 0; row < array.Length; row++)

                {

                    for (int element = 0; element < array[row].Length; element++)

                    {

                        Console.WriteLine("row: {0}, element: {1} , value: {2}",row,element,array[row][element]);

                    }               

                }

    运行结果为:

    row: 0, element: 0 , value: 1

    row: 0, element: 1 , value: 2

    row: 1, element: 0 , value: 1

    row: 1, element: 1 , value: 2

    row: 1, element: 2 , value: 3

    row: 2, element: 0 , value: 1

    row: 2, element: 1 , value: 2

    row: 2, element: 2 , value: 3

    row: 2, element: 3 , value: 4

  • 相关阅读:
    BZOJ 1500 维修数列
    BZOJ 1501 智慧珠游戏
    BZOJ 1507 Editor
    BZOJ 3223 文艺平衡树
    BZOJ 3224 普通平衡树
    BZOJ 3196 二逼平衡树
    BZOJ 1048 分割矩阵
    BZOJ 1047 理想的正方形
    BZOJ 1046 上升序列
    BZOJ 1045 糖果传递
  • 原文地址:https://www.cnblogs.com/FinleyJiang/p/7602556.html
Copyright © 2020-2023  润新知