之前的内容中,我们通过用程序记录一个班级的学生名字这个例子,引出了一个稍微复杂的数据类型——数组。
通过记录颜色的这个功能,学会了多维数组。
通过数组,我们可以让类似学生名字这样零散的数据,变成一组的有关联的数据。
比如,一个班级有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号班级学生的姓名,于是依照数组索引调用方法就有了:
这就是数组的数组,屏幕前的小伙伴们你们学会了吗?