[小雨学编程之C#] 18.7.2 数组的数组

之前的内容中,我们通过用程序记录一个班级的学生名字这个例子,引出了一个稍微复杂的数据类型——数组。

通过记录颜色的这个功能,学会了多维数组。

通过数组,我们可以让类似学生名字这样零散的数据,变成一组的有关联的数据。

比如,一个班级有3个学生,小a、小b、小c,那么我们可以这样表示:

string[] names={"小a"、"小b"、"小c"};

这样,这些名字,就变成了一个集体——一个班级!

那么随着,我们编程技术的深入,我们会遇到这样的情况,我们需要记录一个年级的学生姓名数据,其中同年级有3个班级:

1号班级3个学生:小a、小b

2号班级4个学生:小d、小e、小f

3号班级5个学生:小h、小i、小j、小k

对于这样的数据保存,我们很容易想到,可以声明3个数组,用来分别保存三个班级中的学生数据。

比如:

string[] names1={"小a"、"小b"};

string[] names2={“小d”、“小e"、"小f"};

string[] names3={"小h"、"小i"、"小j"、"小k"};

但是,我们仔细的观察,如果我们用3个数组保存的话,不就是用三个大变量保存数据嘛,就变成了零散的三个大变量而已,并不能让它们有集体的关系。

如果要集体关系的话,我们就换成多维数组,因为是三个班级保存学生,那么我们声明一个三行几列的多维数组呢?

如果随意一个班级,我们依照2号班级的人数来声明列数的话,我们会发现3号班级是4个人,装不下。所以,为了将所有数据都装下,我们就用人数最多的班级的人数来声明列数,我们声明一个三行4列的多维数组。

string[,] grade=new string[3,4];

那么接下来就是赋真实值啦!

但是这时候我们发现,我们声明的是4列,这样的话,我们怎么存储1号和2号班级呢?显然,“座位”够,人数不够嘛。这样的话,为了凑人数,我们用空字符串代替:

string[,] grade=new string[3,4]{{"小a"、"小b",“”,“”},{“小d”、“小e"、"小f",“”},{"小h"、"小i"、"小j"、"小k"}};

虽然我们实现了对应的内容,但是我们发现,这种使用方式,造成了存储空间的浪费,因为有些"座位”根本没有人坐嘛!

这两种存储方式,都有自己比较大的缺点。

所以,随之而来,我们就需要有一种存储方式,既能使整个年级的数据变成一个整体,又不浪费存储空间。

为了解决这个问题,C#为我们提供了方案,也就是数组的数组。

我们知道一维数组是一个多行单列的表;多维数组是一个多行多列的表。那么数组的数组是啥呢?其实就是字面意思:数组保存子数组。

数组的数组的特点是,子数组的元素个数可以是任意个,不需要统一。

数组的数组,就是数组里面包含数组,所以它的声明方式就是:数据类型[][] 数组名

比如我们要声明一个年级:

string[][] grade;

但是,这种数组的初始化就有意思了,我们在初始化一维数组和多维数组的时候,因为数组包含元素个数是固定的,所以我们在初始化的时候,分配空间是给一个固定的数字,比如:

int[] scores =new int[3];

但是对于数组的数组来说,子数组的元素个数是不固定的,所以我们初始化的时候,只能首先固定子数组的个数,不能固定子数组元素的个数,所以初始化的方式便是:new 数据类型[子数组个数][]

我们这个年级需要有三个班级,那就是new string[3][];后面的方括号中的内容是空的。

我们对比一维数组的四种初始化方式:

第一种:

int[] scores;

scores=new int[4];

第二种:

int[] scores=new int[4];

第三种:

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

第四种:

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

简写为int[] scores={1,2,3,4};

那么数组的数组初始化:

第一种:

string[][] grade;

grade=new string[3][];

第二种:

string[][] grade=new string[3][];

第三种:

string[][] grade = new string[3][]{

new string[]{ "小a","小b"},

new string[]{ "小d","小e","小f"},

new string[]{"小h","小i","小j","小k"},

};

也就是说,第三种方式中,赋具体值的时候,就是在初始化一维数组!

第四种:

string[][] grade = new string[][]{

new string[]{ "小a","小b"},

new string[]{ "小d","小e","小f"},

new string[]{"小h","小i","小j","小k"},

};

简写:

string[][] grade = {

new string[]{ "小a","小b"},

new string[]{ "小d","小e","小f"},

new string[]{"小h","小i","小j","小k"},

};

不过在这里需要注意:

string[][] grade = {

{ "小a","小b"},

{ "小d","小e","小f"},

{"小h","小i","小j","小k"},

};

这样的初始化方式是错误的哦!

其实我们知道,当定义数组之后,我们是可以单独使用数组中元素的,所以就有了这样的赋值方式:

string[][] grade = new string[3][];

grade[0] = new string[] { "小a", "小b" };

grade[1] = new string[] { "小d", "小e", "小f" };

grade[2] = new string[] { "小h", "小i", "小j", "小k" };

最后就是数组的数组的调用啦,比如我们要拿出2号班级学生的姓名,于是依照数组索引调用方法就有了:

这就是数组的数组,屏幕前的小伙伴们你们学会了吗?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值