多维数组的声明


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

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

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

int [,] test1 = {
{,,},
{,,},
{,,},
};

交错数组的声明


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

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

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

int [][] test1 = {
new int[] {,,,},
new int[] {,,},
new int[] {,}
};

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


两者声明时,都必须指定长度,多维数组必须指定每一维的长度,而交错数组需要至少需要指定第一维的长度。
多维数组声明时,符号是这样的 [ , , , , ],逗号在 方括号 [ ] 中,每一维长度用逗号分隔。而交错数组每一维独立在 [ ]中
当你想指定数组长度时,只能在等号右侧指定,int [,] test1 = new int [3,3] 是正确的 ;int [6,4] test1 = new int [6,4] 是错误的;
下面以代码形式说明

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

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

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

下面的方法是正确的

int [,] test1 = {
{,,},
{,,},
{,,}
};

初始化交错数组

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

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

注意,在里面有 new int[],这正是交错数组的特性。交错数组是由数组构成的数组,交错数组要求为内部的每个数组都创建实例。

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

数组的长度是固定的

无论多维数组还是交错数组,长度都是固定的,不能随意改变(应该是指不能像List一样,随意增加和删除元素)。

获取数组的长度

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

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

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

int[][] test1 = {
new int[] {,,},
new int[] {,,},
new int[] {,,},
};
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

使用数组初始化类型


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

例子1

使用数组对集合、集合泛型等初始化
声明一个 List 泛型集合

using System;
using System.Collections.Generic; namespace NetCore
{
class Program
{
//main中的代码
static void Main(string[] args)
{
List<string> list = new List<string>(); Console.ReadKey();
}
}
}

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

using System;
using System.Collections.Generic; namespace NetCore
{
class Program
{
//main中的代码
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=,y=},
new Test{x=,y=},
new Test{x=,y=},
new Test{x=,y=},
new Test{x=,y=},
new Test{x=,y=},
new Test{x=,y=},
new Test{x=,y=},
};
Console.ReadKey();
}

完整代码如下

using System;
using System.Collections.Generic; namespace NetCore
{
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=,y=},
new Test{x=,y=},
new Test{x=,y=},
new Test{x=,y=},
new Test{x=,y=},
new Test{x=,y=},
new Test{x=,y=},
new Test{x=,y=},
};
Console.ReadKey();
}
}
}

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

原文链接

C# 多维数组 交错数组的区别,即 [ , ] 与 [ ][ ]的区别 (转载)的更多相关文章

  1. C# 多维数组 交错数组的区别,即 [ , ] 与 [ ][ ]的区别

    多维数组的声明 在声明时,必须指定数组的长度,格式为 type [lenght ,lenght ,lengh, ... ] int [,] test1 = new int [3,3]; 或声明时即赋值 ...

  2. C#中的数组,多维数组和交错数组

    想研究一些面向对象的东西,也许是代码写得还不够多.感觉还不好,看那些教程,不是嫌太水就是太难看不懂.心情很是落寞 不过再怎样也要坚持每天发一篇博客. 这篇来说一下C#中的数组,多维数组,交错数组的一些 ...

  3. C#二维数组(矩形数组,交错数组)

    C# 支持一维数组.多维数组(矩形数组)和数组的数组(交错的数组) 1.多维数组 声明:string[,] names; 初始化:int[,] numbers = new int[3, 2] { {1 ...

  4. c# 多维数组、交错数组(转化为DataTable)

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  5. 二维数组,锯齿数组和集合 C# 一维数组、二维数组(矩形数组)、交错数组(锯齿数组)的使用 C# 数组、多维数组(矩形数组)、锯齿数组(交叉数组)

    二维数组,锯齿数组和集合 一.二维数组 二维数组:一维数组----豆角二维数组----表格 定义:1.一维数组:数据类型[] 数组变量名 = new 数据类型[数组长度];数据类型[] 数组变量名 = ...

  6. C#交错数组

    交错数组本质上是一维数组只不过这个一维数组里的元素都是数组.因为该一维数组里面的元素可以是任何大小的数组所以定义时只能以这样的格式定义 ][]; 定义完后必须对该数组进行初始化后方可进行赋值等操作否则 ...

  7. (一)二维数组&&指针数组与数组指针

    一.首先我们从字面意思理解一下什么是指针数组什么是数组指针 1.指针数组:本质是一个数组,数组中的每一个元素是一个指针. 2.数组指针:本质是一个指针,而指针指向一个数组. 二.我们该怎么区分指针数组 ...

  8. 数组、ArrayList、List、LinkedList的区别

    一.数组 数组在内存中是连续存储的,所以它的索引速度非常快,而且赋值与修改元素也很简单. 1.一维数组 声明一个数组: ]; 初始化一个数组: ] { , , , , }; //定长 声明并初始化: ...

  9. C# -- 交错数组的使用

    C# -- 交错数组的使用 交错数组是元素为数组的数组.交错数组元素的维度和大小可以不同.交错数组有时称为“数组的数组”. 1. 举例一:子数组是长度相同的一维数组 static void Main( ...

随机推荐

  1. POJ 3694Network(Tarjan边双联通分量 + 缩点 + LCA并查集维护)

    [题意]: 有N个结点M条边的图,有Q次操作,每次操作在点x, y之间加一条边,加完E(x, y)后还有几个桥(割边),每次操作会累积,影响下一次操作. [思路]: 先用Tarjan求出一开始总的桥的 ...

  2. 第06节-开源蓝牙协议BTStack框架分析

    本篇博客根据韦东山的视频,整理所得. 本篇博客讲解BTStack的框架,首先来看一下硬件的结构: 蓝牙模块接在电脑上,或是接在开发板上.不论接在哪,我们都需要编写程序来控制这个蓝牙模块. . 我们需要 ...

  3. Caused by: java.lang.ClassNotFoundException: Cannot find class:

    Caused by: org.apache.ibatis.builder.BuilderException: Error resolving class. Cause: org.apache.ibat ...

  4. linux 以导入文件形式添加定时任务(crontab)时需要注意的坑

    在实际操作过程中发现,使用导入文件形式添加定时任务时,会将用户已有的定时任务全部覆盖清理(先清空,再重新导入),所以在使用文件导入定时任务时,需要先将已有定时任务导出,然后将新任务进行追加到已有定时任 ...

  5. dedecms去掉标题长度限制

    dedecms文章标题默认显示字数为60字节(30个汉字),如果想要显示更多要如何操作呢?两步解决问题,随ytkah一起来看看吧.1.后台找到“系统设置-系统基本参数-其他其他选项”(如下图)这时你可 ...

  6. 第二阶段冲刺(个人)——seven

    今天的计划:设计总的界面背景,统一风格. 昨天做了什么?优化登录.注册信息的填写判断.

  7. JS常用关键字总结

    in: 案例1.遍历对象: for(key in obj) { console.info( key+":"+obj[key]; ) }; 案例2.判断对象中是否有属性: " ...

  8. 利用easyui的行编辑自动增加一行来进行增删有详细注解

    jQuery EasyUI 框架提供了创建网页所需的一切,帮助您轻松建立站点. easyui 是一个基于 jQuery 的框架,集成了各种用户界面插件. easyui 提供建立现代化的具有交互性的 j ...

  9. Python实现电子词典(图形界面)

    Python实现电子词典(图形界面) 终端电子词典:https://www.cnblogs.com/noonjuan/p/11341375.html 文件一览: .├── client.py├── d ...

  10. [RN] 阿里 ant-design 菜单比较丰富 https://github.com/ant-design/ant-design-mobile

    阿里 ant-design  菜单比较丰富 https://github.com/ant-design/ant-design-mobile 天和风雨顺 地和五谷丰 人和事业旺 家和万事兴