• 【CLR Via C#】16 数组


    • 所有的数组都隐式的从System.Array抽象类派生,后者又派生自System.Object
    • 数组是引用类型,所以会在托管堆上分配内存,数组对象占据的内存块包含数组的元素,一个类型对象指针、一个同步块索引和一些额外的成员。
    • 所有的数组都隐式的实现IEnumerable,ICollection和IList接口,只是实现这些接口,而非实现其泛型接口IEnumerable<T>等,其主要是考虑到多维数组和非零基数数组(非零基数是指数组的索引值不从0开始)。在创建一个数组的时候,会自动使数组类型实现IEnumerable<T>等接口。
    • 数组的转型条件必须是维数和并需存在一个隐式或显示的转换。如下代码所示
        string [] strArray=new string[]{"luge","luya"}; 
        object[] objArray=strArray;//转换成功
        int [] intArray=new int[]{1,2};
        objArray=intArray;//转换失败
    
    • 零基数组和非零基数组
         对于非零基数组的创建方式如下所示:
        Array intArray=Array.CreateInstance(typeof(Int32),new int[]{5},new int[]{1});
        Console.WriteLine(intArray.GetLowerBound(0));//1
        Console.WriteLine(intArray.GetUpperBound(0));//5
    • 多维数组(Multi-dimension)与交错数组(jagged Array)

      多维数组:一个整体的数组,在内存中占据一整块托管堆内存块

      交错数组:数组元素的维数和大小可以不同,交错数组有时候称为数组的数组。通过二维交错数组为例。其内存分配,通过第一维元素找到相对应的数组元素,如下例子所示,通过arr[0]的指向可以找到new int[5]的数组元素。从这例子中可以看到,对于一个二维且维数为2的交错数组,需要初始化3次数组。这样会产生效率问题。可以看出交错数组的消耗主要在创建和销毁上。
      日常的应用中,如果有多次访问,应该使用交错数组;对于一次访问应该使用多维数组
           //声明
            int[][] arr = new int[2][];
            // 初始化元素
            arr[0] = new int[5] { 1, 3, 5, 7, 9 };
            arr[1] = new int[4] { 2, 4, 6, 8 };    
  • 相关阅读:
    导出数据到Excel文件
    判断是否在某个时间段以内
    获取网络图片并保存到指定目录
    创建目录并且将数据写入txt文件、删除指定目录下的文件
    获取二维数组中指定字段的值,并且将值组成一维数组
    JS--获取月份天数
    php---邮件发送
    3D--魔方
    leetcode每日一题之10.分割回文串 II
    leetcode每日一题之9.最长递增子序列
  • 原文地址:https://www.cnblogs.com/luge/p/ClR_Via_CSharp_Array.html
Copyright © 2020-2023  润新知