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
然后呢,先上代码吧
- //一维数组
- 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迭代也有所不同,
但都非常给力,具体可以参考相关文章
交错数组的访问速度比多维数组快
具体的分析可以参见
《C#中各种数组性能比较》http://www.cnblogs.com/xuefeng1982/archive/2010/03/04/1678152.html
唉,想自己写一些东西,真的不容易。也许是自己对这部分的内容掌握还没十分彻底,也许是语言表达的问题
总之短短的一篇文章,写了好久,而且似乎没能表达出什么特别的东西
C#中的数组,多维数组和交错数组的更多相关文章
- 地图四叉树一般用在GIS中,在游戏寻路中2D游戏中一般用2维数组就够了
地图四叉树一般用在GIS中,在游戏寻路中2D游戏中一般用2维数组就够了 四叉树对于区域查询,效率比较高. 原理图
- C语言中如何将二维数组作为函数的参数传递
今天写程序的时候要用到二维数组作参数传给一个函数,我发现将二维数组作参数进行传递还不是想象得那么简单里,但是最后我也解决了遇到的问题,所以这篇文章主要介绍如何处理二维数组当作参数传递的情况,希望大家不 ...
- php中count获取多维数组长度的方法
转自:http://www.jb51.net/article/57021.htm 本文实例讲述了php中count获取多维数组长度的实现方法.分享给大家供大家参考.具体分析如下: 先来看看下面程序运行 ...
- php中向前台js中传送一个二维数组
在php中向前台js中传送一个二维数组,并在前台js接收获取其中值的全过程方法: (1),方法说明:现在后台将数组发送到前台 echo json_encode($result); 然后再在js页面中的 ...
- 《剑指Offer》第1题(Java实现):在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
一.题目描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该 ...
- 剑指offer 1.数组 二维数组中查找
题目描述 在一个二维数组中(每个一维数组的长度相同), 每一行都按照从左到右递增的顺序排序, 每一列都按照从上到下递增的顺序排序. 请完成一个函数, 输入这样的一个二维数组和一个整数,判断数组中是否含 ...
- 以杨辉三角为例,从内存角度简单分析C语言中的动态二维数组
学C语言,一定绕不过指针这一大难关,而指针最让人头疼的就是各种指向关系,一阶的指针还比较容易掌握,但一旦阶数一高,就很容易理不清楚其中的指向关系,现在我将通过杨辉三角为例,我会用四种方法从内存的角度简 ...
- 如何在C++中动态建立二维数组(转)
http://blog.sina.com.cn/s/blog_7c073a8d0100qp1w.html http://blog.163.com/wujiaxing009@126/blog/stati ...
- Java中如何获取多维数组的长度
在程序处理中遍历数组是一种很常见的操作,但遍历数组时,我们需要知道数组各维度的长度(一维数组除外,for each 可以遍历),下面举例说明如何求多维数组的长度. 一维 : int [] array ...
随机推荐
- ubuntu 安装配置jdk+eclipse+android sdk
共5步: 1.安装jdk 2.安装eclipse 3.安装android-sdk 4.安装adb 5.在eclipse中安装ADT 1.安装jdk 之前已经安装好了. 用下面的命令安装,只需一些时间, ...
- Virtual Box常用指令
以下操作需在命令行里将当前路径设为 Virtual Box安装目录 1. 调整磁盘大小(只能调整动态分配的.vdi格式文件) VBoxManage modifyhd "xxx.vdi&quo ...
- java编程思想读书笔记三(11-21)
十一:持有对象 >持有对象实例 ●数组将数字与对象联系起来.它保存类型明确的对象,查询对象时,不需要对结果做类型转换.他可以是多维的. 可以保存基本的数据类型.但是,数组一旦生成,容量就不会在变 ...
- 怎样使用VMware Workstation(虚拟机)
怎样使用VMware Workstation(虚拟机) 听语音 浏览:66981 | 更新:2010-12-06 16:26 | 标签:vmware 1 2 3 4 5 6 7 分步阅读 一键约师傅 ...
- nginx负载均衡集群中的session共享说明
在网站使用nginx+php做负载均衡情况下,同一个IP访问同一个页面会被分配到不同的服务器上,如果session不同步的话,就会出现很多问题,比如说最常见的登录状态. 下面罗列几种nginx负载均衡 ...
- 事故记录:php-cgi进程过多导致系统资源耗尽
事故现象:机房一台服务器运行一段时间后,突然发现系统资源即将被耗尽! 1)top命令查看一下系统的cpu ram swap的使用情况 由上图分析,可以看出1--共有602个进程,但其中有601个进程休 ...
- 如何调试shell脚本
今天看shell脚本攻略的时候,看见这个方法,感觉还是不错的 #!/bin/bash function DEBUG(){ [[ $_DEBUG == 'on' ]] && $@ || ...
- centos6 pyotp bug修复
yum install python-pip -ypip install pyotp vim /usr/lib/python2.6/site-packages/pyotp/utils.py... 49 ...
- linux查看出口ip 及w3m字符浏览器
Linux 查看服务器出口IP 字符浏览器: http://wiki.ubuntu.org.cn/W3m
- 进程控制块(Process Control Block, PCB)
是为了管理进程设置的一个数据结构.是系统感知进程存在的唯一标志.通常包含如以下的信息:(1)进程标识符(唯一)(2)进程当前状态,通常同一状态的进程会被放到同一个队列:(3)进程的程序和数据地址(4) ...