C#中多维数组[,]和交错数组[][]的区别

多维数组的声明

在声明时,必须指定数组的长度,格式为 type [lenght ,lenght ,lengh, ... ]

int [,] test1 = new int [3,3];

或声明时即赋值,由系统推断长度

int [,] test1 = {
            {1,2,3},
            {1,2,3},
            {1,2,3},
        };

交错数组的声明

声明时,至少需要指定第一维的长度,格式为 type [ ] [ ] [ ] ...

int [][] test1 = new int[5][];
int [][] test1 = new int[][];    //注意,此的声明方式是错的

或者声明时即赋值,由系统推断长度

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

多维数组与交错数组 二者的相同、区别

两者声明时,都必须指定长度,多维数组必须指定每一维的长度,而交错数组需要至少需要指定第一维的长度。

多维数组声明时,符号是这样的 [ , , , , ],逗号在 方括号 [ ] 中,每一维长度用逗号分隔。而交错数组每一维独立在 [ ]中

当你想指定数组长度时,只能在等号右侧指定,int [,] test1 = new int [3,3] 是正确的 ;int [6,4] test1 = new int [6,4] 是错误的;

下面以代码形式说明

大小不一致的多维数组会发生错误

int [,] test1 = {
            {1,2,3,4},
            {1,2,3},
            {1,2}
        };         //这样是错的,长度必须一致
int [,] test1 = new int [4,5] {
            {1,2,3,4,5},
            {1,2,3},
            {1,2,3}
        };        //这样也是错误的,长度必须一致,必须为每一个位置赋值

这一点C#与C语言有所区别,C语言可以不全赋值,没有赋值的位置系统默认为0。

下面的方法是正确的

int [,] test1 = {
            {1,2,3},
            {1,2,3},
            {1,2,3}
        };

初始化交错数组

上面已经说了声明一个交错数组的方法

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

注意,在里面有new int[],这正是交错数组的特性。

交错数组是由数组构成的数组,交错数组要求为内部的每个数组都创建实例。

即交错数组的每一维都是一个实例,每一个实例为一个数组。

数组的长度是固定的

无论多维数组还是交错数组,长度都是固定的,不能随意改变。

获取数组的长度

使用 对象.Length 获取数组的长度,需要注意的是,多维数组的长度是每一维相乘,即元素总个数。

       int [,] test1 = {
           {1,2,3},
           {1,2,3},
           {1,2,3}
       };
       Console.WriteLine(test1.Length);
输出为   9

而交错数组的长度则是“内部组成的数组的个数”,例如

int [][] test1 = {
     new int[] {1,2,3},
     new int[] {1,2,3},
     new int[] {1,2,3},
 };
 Console.WriteLine(test1.Length);
 输出为 3

方法

多维数组、交错数组的方法无差别,都具有Sort()、Clear()等方法,这里不再赘述,关于数组的高级用法,请查阅

https://www.jb51.net/Special/265.htm

下列为System.Array类的属性

由于系统提供的方法比较多,有兴趣请查阅

https://docs.microsoft.com/zh-cn/dotnet/api/system.array?view=netframework-4.7.2

使用数组初始化类型

在C#中有 lambda、匿名类等等,C# 5.0/6.0 后,给声明类、声明类型类型、赋值等有了很方便的操作方法。下面举例测试。

例子1

使用数组对集合、集合泛型等初始化

声明一个 List 泛型集合

using System.Collections.Generic;        //头部引入

    //main中的代码
        static void Main(string[] args)
        {
            List<string> list = new List<string>();

            Console.ReadKey();
        }

那么,给集合 list 增加一个项,用 Add() 方法

        static void Main(string[] args)
        {
            List<string> list = new List<string>();
            //增加
            list.Add("a");
            list.Add("b");
            list.Add("c");
            list.Add("d");
            list.Add("e");
            list.Add("f");
            list.Add("g");
            Console.ReadKey();
        }

利用 “数组” 来添加新项

List<string> list = new List<string>(){"a","b","c","d","e","f"}; 

List<string> list = new List<string>{"a","b","c","d","e","f"};

//以上两种方法都可以,注意后面有没有 ()

例子2

上面的例子利用数组直接在集合声明时初始化,但是不能很好的声明“骚操作”。

试试交错数组

1,在 program类 所在的命名空间中写一个类

    public class Test
    {
        public int x;
        public int y;
        public void What()
        {
            Console.WriteLine(x + y);
        }
    }

2,在 Main 方法中

       static void Main(string[] args)
        {
            List<Test> list = new List<Test>()
            {
                new Test{x=1,y=6},
                new Test{x=8,y=6},
                new Test{x=4,y=8},
                new Test{x=5,y=7},
                new Test{x=3,y=3},
                new Test{x=6,y=6},
                new Test{x=9,y=666},
                new Test{x=7,y=6},
            };
            Console.ReadKey();
        }

完整代码如下

    public class Test
    {
        public int x;
        public int y;
        public void What()
        {
            Console.WriteLine(x + y);
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            List<Test> list = new List<Test>()
            {
                new Test{x=1,y=6},
                new Test{x=8,y=6},
                new Test{x=4,y=8},
                new Test{x=5,y=7},
                new Test{x=3,y=3},
                new Test{x=6,y=6},
                new Test{x=9,y=666},
                new Test{x=7,y=6},
            };
            Console.ReadKey();
        }
    }

由于类引用类型,它的内存是引用地址,不像 int、char等类型,所以在对类(引用类型)使用数组、集合等形式时,可以用 “交错数组” 来理解。

以上所述是小编给大家介绍的C#中多维数组[,]和交错数组[][]的区别,希望对大家有所帮助。在此也非常感谢大家对我们网站的支持!

(0)

相关推荐

  • 详解C#编程中一维数组与多维数组的使用

    一维数组 可按下面的示例所示声明五个整数的一维数组. int[] array = new int[5]; 此数组包含从 array[0] 到 array[4] 的元素. new 运算符用于创建数组并将数组元素初始化为它们的默认值.在此例中,所有数组元素都初始化为零. 可以用相同的方式声明存储字符串元素的数组.例如: string[] stringArray = new string[6]; 数组初始化 可以在声明数组时将其初始化,在这种情况下不需要级别说明符,因为级别说明符已经由初始化列表中的元

  • C#多维数组学习使用

    复制代码 代码如下: String[, ,] items = new String[,,] { { { "A1", "A2", "A3", "☆", "○" }, { "B1", "B2", "B3", "☆", "○" }, { "C1", "C2", "C

  • C#交错数组用法实例

    本文实例讲述了C#交错数组用法.分享给大家供大家参考.具体分析如下: 交错数组是数组的数组,交错数组的元素可以是不同的尺寸和大小.交错数组有时也被称为"数组的数组".下面的示例显示如何声明,初始化和访问交错数组. 你有一写数据行,如整数,要将其存储在一个单一的数据结构.就可以用到交错数组了. 交错数组的循环遍历要比二维数组快,也比二维数组节省空间 下面的交错数组包含三行,第一行有两个元素,第二排有六个元素,第三排有三个要素 int[][] jagged = new int[3][];

  • 深入解析C#中的交错数组与隐式类型的数组

    交错数组 交错数组是元素为数组的数组.交错数组元素的维度和大小可以不同.交错数组有时称为"数组的数组".以下示例说明如何声明.初始化和访问交错数组. 下面声明一个由三个元素组成的一维数组,其中每个元素都是一个一维整数数组: int[][] jaggedArray = new int[3][]; 必须初始化 jaggedArray 的元素后才可以使用它.可以如下例所示初始化该元素: jaggedArray[0] = new int[5]; jaggedArray[1] = new int

  • C#交错数组知识点分析

    交错数组:数组元素本身也是一个数组 public static void Main(string[] args) { int[][] arr = new int[5][]; arr[0] = new int[8]; arr[1] = new int[8]; arr[2] = new int[8]; arr[3] = new int[8]; arr[4] = new int[8]; Random rdm = new Random(); for (int i = 0; i < arr.Length;

  • C#中获取二维数组的行数和列数以及多维数组各个维度的长度

    如何获取二维数组中的元素个数呢? int[,] array = new int[,] {{1,2,3},{4,5,6},{7,8,9}};//定义一个3行3列的二维数组 int row = array.Rank;//获取维数,这里指行数 int col = array.GetLength(1);//获取指定维度中的元素个数,这里也就是列数了.(0是第一维,1表示的是第二维) int col = array.GetUpperBound(0)+1;//获取指定维度的索引上限,在加上一个1就是总数,这

  • C#交错数组浅析

    C#数组有很多值得学习的地方,这里我们主要介绍C#交错数组,包括介绍一维数组例.二维数组例.C#交错数组等方面. 数组是在我们编程当中经常用到的,想来大家对数组都有一定的概念,这部分内容将给大家详细讲解数组在C#中是如何来定义及使用的. 定义:数组是具有同一类型的一组值,数组是引用类型的,因此存在内存堆中.数组中的元素值可以在定义数组时赋予,也可以在定义数组后对单个元素进行赋值. 一维数组例: 复制代码 代码如下: public static void Main() { //一维数组 int[]

  • C#中多维数组[,]和交错数组[][]的区别

    多维数组的声明 在声明时,必须指定数组的长度,格式为 type [lenght ,lenght ,lengh, ... ] int [,] test1 = new int [3,3]; 或声明时即赋值,由系统推断长度 int [,] test1 = { {1,2,3}, {1,2,3}, {1,2,3}, }; 交错数组的声明 声明时,至少需要指定第一维的长度,格式为 type [ ] [ ] [ ] ... int [][] test1 = new int[5][]; int [][] tes

  • Java中增强for循环在一维数组和二维数组中的使用方法

    一维数组: int[] a={1,2,3}; for(int i:a) { System.out.print(i+" "); } 输出:1 2 3 二维数组: import java.util.Scanner; public class tet { public static void main(String[] args) { //int[][] b={{1,2,3},{4,5,6}};行 int[][] a=new int[5][];//必须明确行数 for(int i=0;i&l

  • 浅谈java中的一维数组、二维数组、三维数组、多维数组

    这个数组可以看做新手学习,从一维数组 到 多维 数组 循环渐进,其实看起也很简单,一看便知,众所周知,一维.二维或许经常用到,用到二维以上应该就很少了. public class test { public static void main(String[] args) { /*一维数组*/ int num[] = {0,1,2}; /*下面输出 3 行数据,0 ~ 2*/ for (int i = 0; i < num.length; i++) { System.out.println("

  • thinkPHP中多维数组的遍历方法

    本文实例讲述了thinkPHP中多维数组的遍历方法.分享给大家供大家参考,具体如下: $drug=array( 'ACEI'=>array(array('ch_name'=>'我们','en_name'=>'captopril'),array('ch_name'=>'脚本下载','en_name'=>'enalapril'), array('ch_name'=>'赖诺普利','en_name'=>'lisinopril')), 'ARB'=>array(ar

  • python中numpy包使用教程之数组和相关操作详解

    前言 大家应该都有所了解,下面就简单介绍下Numpy,NumPy(Numerical Python)是一个用于科学计算第三方的Python包. NumPy提供了许多高级的数值编程工具,如:矩阵数据类型.矢量处理,以及精密的运算库.专为进行严格的数字处理而产生.下面本文将详细介绍关于python中numpy包使用教程之数组和相关操作的相关内容,下面话不多说,来一起看看详细的介绍: 一.数组简介 Numpy中,最重要的数据结构是:多维数组类型(numpy.ndarray) ndarray由两部分组成

  • python中numpy基础学习及进行数组和矢量计算

    前言 在python 中有时候我们用数组操作数据可以极大的提升数据的处理效率,类似于R的向量化操作,是的数据的操作趋于简单化,在python 中是使用numpy模块可以进行数组和矢量计算. 下面来看下简单的例子 import numpy as np data=np.array([2,5,6,8,3]) #构造一个简单的数组 print(data) 结果: [2 5 6 8 3] data1=np.array([[2,5,6,8,3],np.arange(5)]) #构建一个二维数组 print(

  • PHP中使用array函数新建一个数组

    PHP 中的数组实际上是一个有序映射.映射是一种把 values 关联到 keys 的类型.此类型在很多方面做了优化,因此可以把它当成真正的数组,或列表(向量),散列表(是映射的一种实现),字典,集合,栈,队列以及更多可能性.由于数组元素的值也可以是另一个数组,树形结构和多维数组也是允许的. array (PHP 4, PHP 5) array - 新建一个数组 说明 复制代码 代码如下: array array ([ mixed $... ] ) 返回根据参数建立的数组.参数可以用 => 运算

随机推荐