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

时间:2022-05-25 17:06:43

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

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

这篇来说一下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。请尊重原作者版权

C#中的数组,多维数组和交错数组的更多相关文章

  1. 地图四叉树一般用在GIS中,在游戏寻路中2D游戏中一般用2维数组就够了

    地图四叉树一般用在GIS中,在游戏寻路中2D游戏中一般用2维数组就够了 四叉树对于区域查询,效率比较高. 原理图

  2. C语言中如何将二维数组作为函数的参数传递

    今天写程序的时候要用到二维数组作参数传给一个函数,我发现将二维数组作参数进行传递还不是想象得那么简单里,但是最后我也解决了遇到的问题,所以这篇文章主要介绍如何处理二维数组当作参数传递的情况,希望大家不 ...

  3. php中count获取多维数组长度的方法

    转自:http://www.jb51.net/article/57021.htm 本文实例讲述了php中count获取多维数组长度的实现方法.分享给大家供大家参考.具体分析如下: 先来看看下面程序运行 ...

  4. php中向前台js中传送一个二维数组

    在php中向前台js中传送一个二维数组,并在前台js接收获取其中值的全过程方法: (1),方法说明:现在后台将数组发送到前台 echo json_encode($result); 然后再在js页面中的 ...

  5. 《剑指Offer》第1题(Java实现):在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。

    一.题目描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该 ...

  6. 剑指offer 1.数组 二维数组中查找

    题目描述 在一个二维数组中(每个一维数组的长度相同), 每一行都按照从左到右递增的顺序排序, 每一列都按照从上到下递增的顺序排序. 请完成一个函数, 输入这样的一个二维数组和一个整数,判断数组中是否含 ...

  7. 以杨辉三角为例,从内存角度简单分析C语言中的动态二维数组

    学C语言,一定绕不过指针这一大难关,而指针最让人头疼的就是各种指向关系,一阶的指针还比较容易掌握,但一旦阶数一高,就很容易理不清楚其中的指向关系,现在我将通过杨辉三角为例,我会用四种方法从内存的角度简 ...

  8. 如何在C++中动态建立二维数组(转)

    http://blog.sina.com.cn/s/blog_7c073a8d0100qp1w.html http://blog.163.com/wujiaxing009@126/blog/stati ...

  9. Java中如何获取多维数组的长度

    在程序处理中遍历数组是一种很常见的操作,但遍历数组时,我们需要知道数组各维度的长度(一维数组除外,for each 可以遍历),下面举例说明如何求多维数组的长度. 一维 : int [] array ...

随机推荐

  1. 深入理解 RESTful Api 架构

    转自https://mengkang.net/620.html 一些常见的误解 不要以为 RESTful Api  就是设计得像便于 SEO 的伪静态,例如一个 Api 的 URL 类似于 http: ...

  2. svn patch用法

    最近遇到了一个patch的使用场景: 有一个同事对源码做了一些修改,但是又不想将源码提交到SVN服务器,而我又想得到他所做的修改. patch的使用方法: 创建patch 在要导出“修改”的目录中,单 ...

  3. Delphi- 调用存储过程的方法

    Delphi控件里拉一个TADOStoredProc,配置好相关链系,具体的操作列子如下: procedure TForm1.btnFirstClick(Sender: TObject); begin ...

  4. jQuery EasyUI 1.4.4 Combobox无法检索中文输入的问题

    在项目里使用了EasyUI的Combobox,当ComboBox的item是英文时,都能正常检索出对应项,但是如果使用中文输入法输入几个字母然后通过按shift键输入时,奇怪的事情发生了,combob ...

  5. 【Cocos2d-X开发学习笔记】第27期:游戏背景之贴图地图类(CCTileMapAtlas)的使用

    本系列学习教程使用的是cocos2d-x-2.1.4(最新版为3.0alpha0-pre) ,PC开发环境Windows7,C++开发环境VS2010 一.贴图地图类CCTileMapAtlas 除了 ...

  6. 浙大 pat 1024题解

    1024. Palindromic Number (25) 时间限制 400 ms 内存限制 32000 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue A ...

  7. python——爬虫&问题解决&思考(四)

    继续上一篇文章的内容,上一篇文章中已经将url管理器和下载器写好了.接下来就是url解析器,总的来说这个模块是几个模块中比较难的.因为通过下载器下载完页面之后,我们虽然得到了页面,但是这并不是我们想要 ...

  8. [USACO12FEB]牛的IDCow IDs

    题目描述 Being a secret computer geek, Farmer John labels all of his cows with binary numbers. However, ...

  9. 用Python递归解决阿拉伯数字转为中文财务数字格式的问题(2)--打开思路的一种方法

    几天前自己写了个将阿拉伯数字转为中文财务数字的程序.用的递归,不幸的是它是树形递归. 虽然实际过程中不太可能出现金额数字大到让Python递归栈溢出,但是始终是一块心病,这玩意终究在理论上是受限制的. ...

  10. Django lazy load 懒加载 倒序查询

    Django orm默认懒加载   Django orm默认使用的懒加载,即使用的时候才去访问数据库,且每次默认取最少的数据,当然这样有好处也有坏处... 坏处: 会导致频繁的查询数据库,如涉及到外键 ...