C# 多维数组 交错数组的区别,即 [ , ] 与 [ ][ ]的区别 (转载)
多维数组的声明
在声明时,必须指定数组的长度,格式为 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# 多维数组 交错数组的区别,即 [ , ] 与 [ ][ ]的区别 (转载)的更多相关文章
- C# 多维数组 交错数组的区别,即 [ , ] 与 [ ][ ]的区别
多维数组的声明 在声明时,必须指定数组的长度,格式为 type [lenght ,lenght ,lengh, ... ] int [,] test1 = new int [3,3]; 或声明时即赋值 ...
- C#中的数组,多维数组和交错数组
想研究一些面向对象的东西,也许是代码写得还不够多.感觉还不好,看那些教程,不是嫌太水就是太难看不懂.心情很是落寞 不过再怎样也要坚持每天发一篇博客. 这篇来说一下C#中的数组,多维数组,交错数组的一些 ...
- C#二维数组(矩形数组,交错数组)
C# 支持一维数组.多维数组(矩形数组)和数组的数组(交错的数组) 1.多维数组 声明:string[,] names; 初始化:int[,] numbers = new int[3, 2] { {1 ...
- c# 多维数组、交错数组(转化为DataTable)
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
- 二维数组,锯齿数组和集合 C# 一维数组、二维数组(矩形数组)、交错数组(锯齿数组)的使用 C# 数组、多维数组(矩形数组)、锯齿数组(交叉数组)
二维数组,锯齿数组和集合 一.二维数组 二维数组:一维数组----豆角二维数组----表格 定义:1.一维数组:数据类型[] 数组变量名 = new 数据类型[数组长度];数据类型[] 数组变量名 = ...
- C#交错数组
交错数组本质上是一维数组只不过这个一维数组里的元素都是数组.因为该一维数组里面的元素可以是任何大小的数组所以定义时只能以这样的格式定义 ][]; 定义完后必须对该数组进行初始化后方可进行赋值等操作否则 ...
- (一)二维数组&&指针数组与数组指针
一.首先我们从字面意思理解一下什么是指针数组什么是数组指针 1.指针数组:本质是一个数组,数组中的每一个元素是一个指针. 2.数组指针:本质是一个指针,而指针指向一个数组. 二.我们该怎么区分指针数组 ...
- 数组、ArrayList、List、LinkedList的区别
一.数组 数组在内存中是连续存储的,所以它的索引速度非常快,而且赋值与修改元素也很简单. 1.一维数组 声明一个数组: ]; 初始化一个数组: ] { , , , , }; //定长 声明并初始化: ...
- C# -- 交错数组的使用
C# -- 交错数组的使用 交错数组是元素为数组的数组.交错数组元素的维度和大小可以不同.交错数组有时称为“数组的数组”. 1. 举例一:子数组是长度相同的一维数组 static void Main( ...
随机推荐
- python中os与sys作用与区别
https://www.cnblogs.com/cloak/p/11237285.html OS模块 在自动化测试中,经常需要查找操作文件,比如说查找配置文件(从而读取配置文件的信息),查找测试报告( ...
- Spring Boot Admin 2.1.0
原文:https://blog.csdn.net/forezp/article/details/86105850 Spring Boot Admin简介 Spring Boot Admin是一个开源社 ...
- 大数据技术原理与应用【第五讲】NoSQL数据库:5.3 NoSQL的四大类型
5.3 NoSQL的四大类型 5.3.1 键值数据库和列族数据库 可以分为四大类产品:键值数据库,列族数据库,文档数据库,图数据库 (代表) 1.键值数据库: 用的多:redis云数据库: ...
- JavaScript 关于金额、数字验证的正则表达式
JavaScript 关于金额.数字验证的正则表达式 function ismoney(money) { var reg = /(^[1-9]([0-9]+)?(\.[0-9]{1,2})?$)|(^ ...
- <人人都懂设计模式>-装饰模式
书上,真的用一个人穿衣打拌来讲解装饰模式的呢. from abc import ABCMeta, abstractmethod class Person(metaclass=ABCMeta): def ...
- Java精通并发-Condition方法实现分析与讲解
在上两次已经对Condition这个类的javadoc进行了完整的解读,接下来则对它里面的方法进行一下纵览,并进行官方的解读,如下: 下面一一来读一下各个方法的说明: await(): 上面这段说明已 ...
- USACO Roadblock
洛谷 P2176 [USACO14FEB]路障Roadblock 洛谷传送门 JDOJ 2406: USACO 2014 Feb Silver 2.Roadblock JDOJ传送门1 JDOJ 24 ...
- vue watch 深度监听
watch 是vue 里非常有用的回调函数,监听数据变化,非常方便好用,但是,当监听的数据是个复杂型的数据里,里面的数据变化时普通的监听方式是监听不到的,必须使用深度监听: data() { retu ...
- es6 Class类的使用
es6新增了一种定义对象实例的方法,使用class关键字定义类,与class相关的知识点也逐步火热起来,但是部分理解起来相对抽象,简单对class相关的知识点进行总结,更好的使用class. 关于类有 ...
- three.js 加载STL文件
注意: TrackballControls.js 和 TDSLoader.js 都引用了 three.module.js,特别注意引用的路径 比如: 直接代码咯 <!DOCTYPE html&g ...