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=,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();
}
完整代码如下
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 = { ...
- 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( ...
随机推荐
- Steps to install Docker on Manjaro 16.10--转
https://manjaro-tutorial.blogspot.com/2016/12/how-to-install-docker-on-manjaro-1610.html Open Termin ...
- 对Tensorflow中tensor的理解
Tensor即张量,在tensorflow中所有的数据都通过张量流来传输,在看代码的时候,对张量的概念很不解,很容易和矩阵弄混,今天晚上查了点资料,并深入了解了一下,简单总结一下什么是张量的阶,以及张 ...
- PHP之string之rtrim()函数使用
rtrim (PHP 4, PHP 5, PHP 7) rtrim - Strip whitespace (or other characters) from the end of a string ...
- 前端工程师的mysql笔记
背景 最近常参与后台php项目,虽说刚毕业时自学过一阵子php和mysql,不过长时间没用也忘差不多了,于是把mysql再温习一遍,前端同学也可以一起学习下! mysql安装以及操作 安装 brew ...
- zabbix与nagios八项重要对比 结论根据业务环境需求决定
1.web功能: Nagios简单直观,报警与数据都在同一页面,***.红色即为问题项.Nagios web端不要做任何配置. Zabbix监控数据与报警是分开的,查看问题项需要看触发器,查看数据在最 ...
- 移动端使用的WebKit私有属性(转)
<!DOCTYPE HTML><html><head> <meta charset="utf-8"> <title>无标 ...
- shell命令跟踪
Linux Shell提供了两种方式来跟踪Shell脚本中的命令,以帮助我们准确的定位程序中存在的问题.下面的代码为第一种方式,该方式会将Shell脚本中所有被执行的命令打印到终端,并在命令前加&qu ...
- 如鹏网学习笔记(十三)EasyUI
一.EasyUI简介 是一组基于JQuery的UI插件集合 主要作用:为JQuery对象提供新的方法,实现新的功能 可以快速创建出简洁.友好.美观的页面,非常适合做网站后台管理页面(不够漂亮,不适合做 ...
- [LeetCode]Combination Sum题解(DFS)
Combination Sum Given a set of candidate numbers (C) (without duplicates) and a target number (T), f ...
- hdu 4193 Non-negative Partial Sums 单调队列。
Non-negative Partial Sums Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 65536/32768 K (Jav ...