C#中的数组,多维数组和交错数组

想研究一些面向对象的东西,也许是代码写得还不够多。感觉还不好,看那些教程,不是嫌太水就是太难看不懂。心情很是落寞

不过再怎样也要坚持每天发一篇博客。

这篇来说一下C#中的数组,多维数组,交错数组的一些东西。

有那么一点点研究茴香豆的茴有四种写法的感觉。

 

先讲三点显而易见却又值得一提的东西

 

第一点数组是一种数据结构

似乎没什么好解释的

 

第二点数组类型是从抽象类Array派生出的引用类型

与C当中的数组不同的是C#以面向对象的方式设计的。

所以再次证明 任何东西都是对象

 

第三点C#的数组可以开很大

C直接开在堆栈不同的还有C#的数组在托管栈只有引用,而实际的数据是放在托管堆里面的。

int[, , ] a = new int[500, 500, 500];

这样是不会有问题的。同样的大小在C早就……了

虽然是这么说,正常使用是不大可能用到这么大的数组。

 

第四点数组类型可以使用foreach迭代

这个部分我想另外写一篇来研究这个

 

另外还有几点可以参考MSDN数组部分

http://msdn.microsoft.com/zh-cn/library/9b9dty7d%28VS.80%29.aspx

 

然后呢,先上代码吧

[c-sharp]  view plain  copy
  1. //一维数组  
  2. int[] a1 = new int[3];  
  3. int[] a2 = new int[] { 0, 1, 2 };  
  4. int[] a3 = { 0, 1, 2 };  
  5. int[] a4;  
  6. a4 = new int[3] { 0, 1, 2 };  
  7. //int[3] a5; 错误代码  
  8. //int a5[3]; 错误代码  
  9. a1[0] = 0;  
  10. Console.WriteLine("{0}",a1[0]);  
  11. //多维数据  
  12. int[,] b1 = new int[3, 3];  
  13. int[,] b2 = new int[,] {{0,1,2},  
  14.                         {0,1,2},  
  15.                         {0,1,2}};  
  16. int[,] b3 = new int[,] {{0,1,2},  
  17.                         {0,1,2},  
  18.                         {0,1,2}};  
  19. int[,] b4;  
  20. b4 = new int[,]{{0,1,2},  
  21.                 {0,1,2},  
  22.                 {0,1,2}};  
  23. int[, ,] b5 = new int[2,2,2] {{{1,2},{1,2}},  
  24.                               {{1,2},{1,2}}};  
  25. b5[0,0,0] = 1;  
  26. Console.WriteLine("{0}",b5[0,0,0]);  
  27. //交错数组(数组的数组)  
  28. int[][] c1 = new int[3][];  
  29. c1[0] = new int[3];  
  30. c1[1] = new int[2];  
  31. c1[2] = new int[1];  
  32. int[][] c2 = new int[][]  
  33. {  
  34.     new int[] {1,2,3},  
  35.     new int[] {4,5,6},  
  36.     new int[] {7,8,9}  
  37. };  
  38. int[][] c3 =  
  39. {  
  40.     new int[] {1,2,3},  
  41.     new int[] {4,5,6},  
  42.     new int[] {7,8,9}  
  43. };  
  44. //int[][] c4 = new int[3][3];错误代码  
  45. c1[0][0] = 3;  
  46. Console.WriteLine("{0}",c1[0][0]);  
  47. //混搭  
  48. int[][,] d1 = new int[1][,];  
  49. d1[0] = new int[,]{{4,2,3},  
  50.                    {4,2,3},  
  51.                    {4,2,3}};  
  52. Console.WriteLine("{0}",d1[0][0,0]);  

 

 

一维数组部分,比较有价值的是那两行错误的代码。

C#与C在这个地方语法有所不同,本来这两种语言的设计这块时的思路就有所差异

关于语法的事,习惯就好了

 

关于多维数组,C#当中有两种方式,一个是多维数组,另一种是交错数组

根据MSDN的说明

多维数组只是数组,交错数组是数组的数组

半句半句看都还好,整句看起来怎么不是一回事。我也不知道该怎么解释比较好

 

简单总结了下面几点

 

交错矩阵的声明部分比较麻烦

使用时交错数组的样子更像C语言是人都看出来了,可以利用FOR语句来简化


多维数组只能构造一个矩形的数据结构,而使用交错数组可以设计出不规则的结构

所以有需要时可以选择使用交错矩阵。

在这里 使用foreach迭代也有所不同,

但都非常给力,具体可以参考相关文章


交错数组的访问速度比多维数组快

具体的分析可以参见

《C#中各种数组性能比较》http://www.cnblogs.com/xuefeng1982/archive/2010/03/04/1678152.html

 

唉,想自己写一些东西,真的不容易。也许是自己对这部分的内容掌握还没十分彻底,也许是语言表达的问题

总之短短的一篇文章,写了好久,而且似乎没能表达出什么特别的东西



原文转自:http://blog.csdn.net/atskyline/article/details/6182961
原作者为 atskyline。请尊重原作者版权

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值