• C#数组简单介绍


    定义

    数组是存储多个相同类型元素的固定大小顺序集合。如果需要在数组中存储不同类型的元素,可将其类型指定为object

    数组对应的内存地址是连续的。最低的地址对应第一个元素,最高的地址对应最后一个元素。可以分一维数组和多维数组、交错数组。

    数组属于对象,不是可寻址区域。
    在这里插入图片描述

    多维数组就是具有多个维度。

    交错数组是数组的数组,属于一维数组。

    语法规则

    一维数组

    datatype[] arrayName;
    
    • 1
    • datatype代表数组内元素的数据类型
    • []制定数组的维度,即数组内元素的多少,可缺省
    • arrayName代表数组名称

    多维数组

    datatype[,,...] arrayName;
    
    • 1
    • datatype代表数组内元素的数据类型

    • []制定数组的维度,即数组内元素的多少,可缺省.中间每个逗号代表一个维度

    • arrayName代表数组名称

      //二维数组,
      int[,] array1 = new int[,]{{1,2},{3,4},{4,5}};
      int[,] array2 = new int[3,2]{{1,2},{2,3},{4,5}}
      
      //三维数组,[3,2,2]
      int[,,] array4 = new int[,,]{{{3,4},{2,4}},{{2,4},{5,6}},{{9,10},{2,7}}}
      int[,,] array3 = new int[2,2,3]{{{1,2,3},{3,4,5}},{{4,5,6},{2,3,4}}};
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7

    交错数组

    datatype[][] arrayName;
    
    • 1
    • datatype代表数组内元素的数据类型

    • arrayName代表数组名称

      //5个一维数组
      int[][]source = new int[5][]
      source[0] = new int[] {1,2,3,4};
      source[1] = new int[]{2,3,4,5};
      source[2] = new int[]{1,3,5};
      source[3] = new int[]{4,5,7};
      source[4] = new int[]{9,3,4};
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    使用方法

    初始数组

    声明一个数组不会在内存中初始化数组。当初始化数组变量时,可赋值给数组

    class TestArraysClass
    {
        static void Main()
        {
            // 创建5个元素的数组
            int[] array1 = new int[5];
    
            // 创建数组,并添加元素
            int[] array2 = new int[] { 1, 3, 5, 7, 9 };
    
            // 
            int[] array3 = { 1, 2, 3, 4, 5, 6 };
    
            //二维数组
            int[,] multiDimensionalArray1 = new int[2, 3];
    
            // 创建二维数组,并填入元素
            int[,] multiDimensionalArray2 = { { 1, 2, 3 }, { 4, 5, 6 } };
    
            //创建交错数组
            int[][] jaggedArray = new int[6][];
    
            // 创建交错数组,并填入元素。
            jaggedArray[0] = new int[4] { 1, 2, 3, 4 };
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26

    在进行数组进行声明时,可以避免使用new表达式和数组类型。即隐式类型化数组。

    int[] array1 = {1,2,3,4,5};
    string[] array2 = {"hello","world","book"}
    
    • 1
    • 2

    在尚未创建数组变量的情况下声明数组变量,但必须使用new运算符向此变量分配新数组。

    int[] nums;
    nums = new int[] {1,3,4,5,6,7}
    
    • 1
    • 2

    值类型和引用类型数组

    sometype[] array4 = new sometype[10];
    
    • 1

    此语句的结果取决于sometype是值类型还是引用类型,如果它是值类型,该语句将创建10个元素的数组,其中每个元素的类型都为sometype,如果sometype是引用类型,该语句将创建一个10个元素的数组,其中每个元素都将初始化为空引用。在两个实例中,元素均初始化为元素类型的默认值。 有关值类型和引用类型的详细信息,

    数组赋值

    使用索引号赋值给一个单独的数组元素,或者在声明数组的同时,给数组赋值。

    //使用索引号赋值
    int[] nums = new nums[5];
    nums[1] = 10;
    
    //声明数组时,直接赋值
    int[] nums = {1,2,3,4,5}
    
    //多维数组赋值
    int[,] array2 = new int[,]{{1,2},{2,3,4},{2,3,4,5}}
    
    //交叉数组赋值,一维数组
    int[][] nums = new int[][]
    {
    new int[] { 1, 3, 5, 7, 9 },
    new int[] { 0, 2, 4, 6 },
    new int[] { 11, 22 }
    };
    //交叉数组,二维数组
    int[][,] jaggedArray4 = new int[3][,]
    {
        new int[,] { {1,3}, {5,7} },
        new int[,] { {0,2}, {4,6}, {8,10} },
        new int[,] { {11,22}, {99,88}, {0,9} }
    };
    
    • 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[] nums = new int[] {1,2,3,4,5};
    for(int i=0;i<nums.Length;i++)
    {
    	Console.Writeline(nums[i]);
    }
    Console.Readkey();
    
    //遍历多维数组
    //在想
    
    //遍历交错数组
    int[][] nums = new int[2][];
    nums[0] =new int[3] { 1,2,3};
    nums[1] = new int[4] { 3,4,5,6};
    int sum = 0;
    for (int i = 0; i < nums.Length; i++)
    {
    	for (int j = 0; j < nums[i].Length; j++)
    	sum += nums[i][j];
    }
    Console.WriteLine(sum);
    Console.ReadKey();
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
  • 相关阅读:
    shell_51.Linux获取用户输入_无显示读取,从文件中读取
    Docker涉及的Linux命名空间、CGroups
    @PostConstruct注解详解
    CSR/SSR以及同构渲染的区别
    训练集测试集验证集的区别
    Soft:Eric软件界面的简介、案例应用之详细攻略
    表白墙/留言墙 —— 中级SpringBoot项目,MyBatis技术栈MySQL数据库开发,练手项目前后端开发(带完整源码) 全方位全步骤手把手教学
    遥感目标检测(1)--R3Det
    PostgresSQL----基于Kubernetes部署PostgresSQL
    MAUI+Blazor混合应用开发示例
  • 原文地址:https://blog.csdn.net/yue008/article/details/125533042