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( ...
随机推荐
- django rest framework 解析器组件 接口设计,视图组件 (1)
一.解析器组件 -解析器组件是用来解析用户请求数据的(application/json), content-type 将客户端发来的json数据进行解析 -必须适应APIView -request.d ...
- 测试cnblog
this prelkdfkdjfkljasdlkfjlkjlkjsdf this this code this this pre codeljkjkjkdjkdjkdjkjdkjdkdlajlkdjf ...
- react.js知识汇总
首先ract的基本结构 var Input = React.createClass({ getInitialState: function() { return {value: 'Hello!'}; ...
- UiPath: Selectors repair 选择器的修复,即被选择的按钮发生改变如何选择第二按钮
实现批量注册用户功能时,出现第一个用户注册完时,弹出确认按钮,点击即可,但是第二个用户注册完成时,弹出的按钮与第一个有差异,图形用户界面元素及其父元素的属性都发生改变.所以就点不了按钮,就卡死在这.如 ...
- FileZilla 连接站点 编辑配置文件
- chromedriver对应chrome版本
chromedriver版本 支持的Chrome版本 v2.41 v67-69 v2.40 v66-68 v2.39 v66-68 v2.38 v65-67 v2.37 v64-66 v2.36 v6 ...
- [RN] React Native代码转换成微信小程序代码的转换引擎工具
React Native代码转换成微信小程序代码的转换引擎工具 https://github.com/areslabs/alita
- js如何遍历map类型
1.forEach遍历: map.forEach(function(value,key){ console.log(value,key); }); 函数中第一个参数是属性值,第二个参数是属性 2.fo ...
- django中models字段的联合限制
一.字段联合使用的限制设置: 有这么个需求,现有两个字段,A字段是选择用户是不是vip, B字段是统计用户的vip等级; 要求: 用户不是vip时,A选择false,B字段为空; 是vip时,A字段选 ...
- java 集合运算
package testjavapro; import java.util.BitSet; public class testjavaa { public static void main(Strin ...