想研究一些面向对象的东西,也许是代码写得还不够多。感觉还不好,看那些教程,不是嫌太水就是太难看不懂。心情很是落寞
不过再怎样也要坚持每天发一篇博客。
这篇来说一下C#中的数组,多维数组,交错数组的一些东西。
有那么一点点研究茴香豆的茴有四种写法的感觉。
先讲三点显而易见却又值得一提的东西
第一点数组是一种数据结构
似乎没什么好解释的
第二点数组类型是从抽象类Array派生出的引用类型
与C当中的数组不同的是C#以面向对象的方式设计的。
所以再次证明 任何东西都是对象
第三点C#的数组可以开很大
C直接开在堆栈不同的还有C#的数组在托管栈只有引用,而实际的数据是放在托管堆里面的。
int[, , ] a = new int[500, 500, 500];
这样是不会有问题的。同样的大小在C早就……了
虽然是这么说,正常使用是不大可能用到这么大的数组。
第四点数组类型可以使用foreach迭代
这个部分我想另外写一篇来研究这个
另外还有几点可以参考MSDN数组部分
然后呢,先上代码吧
//一维数组
int[] a1 = new int[3];
int[] a2 = new int[] { 0, 1, 2 };
int[] a3 = { 0, 1, 2 };
int[] a4;
a4 = new int[3] { 0, 1, 2 };
//int[3] a5; 错误代码
//int a5[3]; 错误代码
a1[0] = 0;
Console.WriteLine("{0}",a1[0]);
//多维数据
int[,] b1 = new int[3, 3];
int[,] b2 = new int[,] {{0,1,2},
{0,1,2},
{0,1,2}};
int[,] b3 = new int[,] {{0,1,2},
{0,1,2},
{0,1,2}};
int[,] b4;
b4 = new int[,]{{0,1,2},
{0,1,2},
{0,1,2}};
int[, ,] b5 = new int[2,2,2] {{{1,2},{1,2}},
{{1,2},{1,2}}};
b5[0,0,0] = 1;
Console.WriteLine("{0}",b5[0,0,0]);
//交错数组(数组的数组)
int[][] c1 = new int[3][];
c1[0] = new int[3];
c1[1] = new int[2];
c1[2] = new int[1];
int[][] c2 = new int[][]
{
new int[] {1,2,3},
new int[] {4,5,6},
new int[] {7,8,9}
};
int[][] c3 =
{
new int[] {1,2,3},
new int[] {4,5,6},
new int[] {7,8,9}
};
//int[][] c4 = new int[3][3];错误代码
c1[0][0] = 3;
Console.WriteLine("{0}",c1[0][0]);
//混搭
int[][,] d1 = new int[1][,];
d1[0] = new int[,]{{4,2,3},
{4,2,3},
{4,2,3}};
Console.WriteLine("{0}",d1[0][0,0]);
一维数组部分,比较有价值的是那两行错误的代码。
C#与C在这个地方语法有所不同,本来这两种语言的设计这块时的思路就有所差异
关于语法的事,习惯就好了
关于多维数组,C#当中有两种方式,一个是多维数组,另一种是交错数组
根据MSDN的说明
多维数组只是数组,交错数组是数组的数组
半句半句看都还好,整句看起来怎么不是一回事。我也不知道该怎么解释比较好
简单总结了下面几点
交错矩阵的声明部分比较麻烦
使用时交错数组的样子更像C语言是人都看出来了,可以利用FOR语句来简化
多维数组只能构造一个矩形的数据结构,而使用交错数组可以设计出不规则的结构
所以有需要时可以选择使用交错矩阵。
在这里 使用foreach迭代也有所不同,
但都非常给力,具体可以参考相关文章
交错数组的访问速度比多维数组快
具体的分析可以参见
唉,想自己写一些东西,真的不容易。也许是自己对这部分的内容掌握还没十分彻底,也许是语言表达的问题
总之短短的一篇文章,写了好久,而且似乎没能表达出什么特别的东西