多维数组的声明

在声明时,必须指定数组的长度,格式为 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等类型,所以在对类(引用类型)使用数组、集合等形式时,可以用 “交错数组” 来理解。

最新文章

  1. Java中Comparable与Comparator的区别
  2. mongodb 3 常用命令操作
  3. Centos 部署Keepalive高可用软件
  4. WebService 超简单入门教程(Java)
  5. Android TestView文本文字修改实例
  6. 转js contains 方法
  7. SQL语句修改表
  8. Struts学习之值栈的理解
  9. 【T-SQL进阶】03.执行计划之旅-1
  10. R语言-来自Prosper的贷款数据探索
  11. python - 闭包,迭代器
  12. visual studio属性管理器
  13. 3D游戏图形引擎
  14. [No000016F]高并发下线程安全的单例模式(最全最经典)
  15. C++手机通讯录排序
  16. CentOS 7安装tunctl
  17. Oracle 12C -- 网络性能调优
  18. linux 提示符绝对路径
  19. PHP与SQL数据库交互中文乱码怎么办
  20. ios开发-调用系统自带手势

热门文章

  1. java几个经典的算法题目----------查询子串和等于已知数字
  2. leetcode简单题目两道(3)
  3. Python制作回合制手游外挂简单教程(中)
  4. JS常用时间处理方法
  5. js禁止微信浏览器下拉显示黑底查看网址,不影响内部Scroll
  6. 相对布局--RelativeLayout
  7. OC weak strong __weak __strong copy retain assign nonatomic atomic等关键字的总结
  8. php and js to facebook登陆 最佳实践
  9. IO流的复习笔记
  10. FisherYates费雪耶兹随机置乱算法