数组

1.简单数组

2.多维数组

3.锯齿数组

4.Array类

5.作为参数的数组

6.枚举

7.元组

8.结构比较

如果需 要 使 用同 一 类型的 多 个对 象,就可以 使 用集合和数组。C#用特殊的 记号声明 、

初始 化 和使用数组。 Array类 在后台 发挥作用,它为 数组中 元素的 排 序和过滤提供了几个方法。 使 用枚举器,可 以 迭 代数组中 的 所 有元素。.net4还引 入了 一个新类型 Tuple,它 用于合并不同 类型的 多 个对象。

一、简单数组

如果需要使用同一类型的多个对象,就可以使用数组。数组是一种数据结构,它可以包含同一类型的多个元素。

1.数组的声明:在声明数组时,应先定义数组中元素的类型,其后是一对方括号和一个变量名。

2.数组的初始化:声明了数组后,就必须为数组分配内存,以保存数组的所有元素。数组是引用类型,所以必须给它分配堆上的内存。为此,应使用new运算符,指定数组中元素的类型和数量来初始化数组的变量。还可以用数组初始化器为数组的每个元素赋值。数组初始化器只能在声明数组变量时使用,不能在声明数组之后使用。如果用花括号初始化数组,则还可以不指定数组的大小,因为编译器会自动统计元素的个数。

3.访问数组元素:可以使用索引器访问数组中的元素,一对方括号中间加整数如[0]。数组只支持有整型参数的索引器。通过索引器传递元素编号,就可以访问数组。索引器总是以0开头,表示第一个元素。可以传递给索引器的最大值是元素个数减1.还可以用for、foreach还循环迭代数组中的元素。

4.使用引用类型:声明自定义类型的数组,声明,定义及初始化

二、多维数组:

多维数组用两个或多个整数来索引

声明多维数组时,维与维之间用【,】分隔,初始化时应指定每一维的大小。之后就可以用两个或多个整数作为索引器来访问数组中的元素。声明数组后就不能更改其阶数或维数。使用数组初始化器初始化时,必须初始化数组的每个元素,不能遗漏任何元素。

三、锯齿数组

锯齿数组的大小设置比较灵活,每一行都可以有不同的大小,不同于普通二维数组对应一个矩形。

在声明 锯齿数组时,要依次放置左右括号。 在初始化锯齿数组时,只 在第 1对 方括号中设置该数组包含的 行数。定义各行中 元素个数的 第 2个方括号设置为空,因 为这类数组的 每一行包含不同的 元素个数。 之后,为每一行指定行中的 元素个数。

迭代访问锯齿数组中所有元素的代码可以放在嵌套的for循环中。在外层的for循环中迭代一行中的每个元素。

四、Array类:

用方 括号声明 数组是C#中 使 用 Array类 的 表示法。 在 后台 使 用C# ,会创建一个派生自 抽象基类Array的新类。这样就可以使用Array类为每个C#数组定义的方法和属性了。Array类 实现的 其 他 属性有LongLength和 Rank。 如果数组包含的 元 素个 数超出了 整数的 取值 范围,就可以 使 用LongLength属性来获得元素个数。 使 用 Rank属 性可以 获得数组的 维数。

其他成员:

1.创建数组:Array类是一个抽象类,所以不能使用构造函数来创建数组。但除了可以使用C#语法创建数组实例之外,还可以使用静态方法CreateInstance()创建数组。如果事件不知道元素的类型,该静态方法就非常有用,因为类型可以作为Type对象传递给CreateInstance()方法。第一个参数应是元素的类型,常见typeof(int),第二个参数定义数组的大小。可以用SetValue()方法设置对应元素的值,用GetValue()方法读取对应元素的值。还可以 将已 创建的 数组强制转换成声明 为 int[]的 数组。CreateInstance()方法有很多重载版本,可以创建多维数组和不基于0的数组。

2.复制数组:复制数组,会使 数 组 实 现ICloneable接 口 。 这个接口定义的Clone()方法会创 建数组的浅表副本。如果数组包 含引 用 类型,则 不复制 元 素,而只复制引 用。除了 使 用 Clone()方 法之外,还可以 使 用Copy()方 法 创建 浅表副本。 但Clone()方法和Copy()方法 有一个重要区 别:Clone()方法会创建一个新 数组,而 Copy()方 法必须传 递 阶数 相同 且有 足够元素的己有数组。如果需要包含引用类型的数组的深层副本,就必须迭代数组并创建新对象。

3.排序:Amy类使用QuickSort算法对数组中 元素的 进行排序。 Sort()方法需要数组中的元素实 现ICommble接口 。 因为简单类型(如System.String和System.Int32)实现ICommble接 口 ,所 以 可以 对包含 这些 类型的元素进行排序。如果某个类的对象的排序方式与简单类型的排序方式不同,或者不能修改在数组中用作元素的类,就可以实现IComparer接口或IComparer<T>接口。这两个接口定义了方法COmpare()。要比较的类必须实现这两个接口之一。IComparer接口独立于要比较的类。这就是Compare()方法定义了两个要比较的参数的原因。其返回值与IComparer接口的CompareTo()方法类似 。

五、数组作为参数

数组可作为参数父老乡亲给方法,也可以从方法中返回。要返回一个数组,只需要把数组声明为返回类型。要把数组传递给方法,应把数组声明 为参数。

1.数组协变:数组支持协变,这表示数组可以声明为基类,其派生类型的元素可以赋予数组元素。数组协变只能用于引用类型,不能用于值类型。数组协变有一个问题,它只能通过运行时异常来解决。

2.ArraySegment<T>:表示数组的一段。如果某方法应返回数组的一部分,或者给某方法传递数组的一部分,就可以使用数组段。通过它可以只传递一个参数 ,而不是用3个参数传递数组,领偏移量和元素个数。在这个结构中,关于数组段的信息(偏移量和元素个数)包含在结构的成员中。数组段不复制原数组的元素,但原数组可以通过它访问。如果数组段中的元素改变了,这些变化就会反映到原数组中。

六、枚举

在 foreach语 句中使用枚举,可 以 迭代集合中的 元 素,且无需 知 道 集合中的 元素个数。

foEach语 句使 用了 一个枚 举器。数组或集合实现带GetEnumerator()方法的IEnumerable接口。GetEnumerator()方法返回一个实现Enumerable接口的枚举。接着,foreach语 句就可以 使 用 IEnumerable接口 迭代集合了。

1.IEnumerator接口:foreach语 句使用 IEnumerator接 口 的 方法和属性,迭代集合中的 所有元素。 为此, IEnumerator定 义了Current属性,来返回 光标所在的 元素,该接口 的MoveNext()方 法移动到集合的下一个元素上,如 果有这个元素,该方法就返回true。 如果集合不再有更多的元素,该方法就返回false。这个接口的泛型版本IEnumerator<T>派生自接口IDisposable,因此定义了Dispose()方法,来清理枚举器战胜的资源。IEnumerator接口还定义了Reset()方法,以与COM交互操作。许多.net枚举器通过抛出NotSupportedException类型的异常,来实现这个方法。

2.foreach语句:C#编译器会把foreach语句转换为IEnumerable接口的方法和属性。

3.yield语句

1)迭代集合的不同方式

2)用yield return 返回枚举器

七、元组

数组合 并了 相同 类型的 对象,而元组合并了 不同 类型的 对象。 元 组起 源于函 数 编程语言F# ,在这些语言中频繁使用元 组。.net4定义了8个泛型Tuple类 和一 个 静 态Tuple类 ,它们 用 作 元组的 工 厂。 这里 的 不同 泛 型 Tuple类支持不同 数 量的 元素。 例 如, Tuple<T1> 包含-个元 素, Tuple<T1,T2> 包含 两 个 元 素,以此 类推。如果元组包含的 项超过 8个 ,就可以 使用带 8个参数的Tuple类 定义。 最后一个模板参数是 TRest,表示必须给它传递一个元组。 这样,就可以 创建带任意个参数的元组了。

八、结构比较

数组和元组都实现接口IStructuralEquatable和IStructuralComparable。 这两个接口 都是.net4新增的,不仅可以比 较引 用,还可以比 较内 容。 这些接口 都是显式实现的,所 以 在使用时需要把数组和元组强制转 换 为这 个 接 口。IStructuralEquatable接 口用 于 比较 两 个 元 组 或 数 组 是 否 有 相 同 的 内容 ,IStructuralComparable 接 口 用于给元组或数组排序。

数组/元组的排序和比较

后面没太细看。以后用到的时候再查吧~~

转载于:https://www.cnblogs.com/gdx4430090/p/3166787.html

.net系统自学笔记——数组相关推荐

  1. css 系统自学笔记2017-12-04

    一.几个常用的可以连写的样式属性 1.backgroud: 背景连写:没有先后顺序,都是可选的. 2.font字体属性连写: font: 二.元素分类 块级元素:div p h1~h6 ul li o ...

  2. 自学笔记:89c51单片机最小系统Protues篇

    什么是单片机最小系统? 单片机最小系统:单片机最小应用系统,使用最少的元件组成单片机能够工作的系统. 单片机最小系统三要素:电源模块,(晶振/时钟)振荡电路模块,复位电路模块 1,电源模块:供电.VC ...

  3. JAVA自学笔记07

    JAVA自学笔记07 1.构造方法 1) 例如:Student s = new Student();//构造方法 System.out.println(s);// Student@e5bbd6 2)功 ...

  4. JAVA自学笔记22

    JAVA自学笔记22 1.操作基本数据类型的流 DataInputStream DataOutputStream 数据输出流允许应用程序以适当方式将基本的Java数据类型写入输出流中.然后,应用程序可 ...

  5. 计算机通信网自学笔记(1)

    计算机通信网自学笔记(1) 写在前面: 笔者是电子科技大学信通学院网络工程专业的一名大二学生."在两周内对一门陌生且复杂的专业课进行自学并加以运用",这对于笔者来说是一件十分有挑战 ...

  6. 《数字图像处理》自学笔记(一)

    学习目标:数字图像处理 学习内容: MOOC课 武汉大学 <数字图像处理>自学 https://www.icourse163.org/learn/WHU-1002332010?tid=14 ...

  7. 《深入理解计算机系统》课本第七章自学笔记——20135203齐岳

    <深入理解计算机系统>课本自学笔记 第七章 链接 By20135203齐岳 链接:将各种代码和数据部分收集起来并组合成为一个单一文件的过程,这个文件可被加载(或拷贝)到存储器并执行. 现代 ...

  8. 程序阅读_全面详解LTE_MATLAB建模仿真与实现_自学笔记(2)OFDM_程序阅读

    程序阅读_全面详解LTE:MATLAB建模仿真与实现_自学笔记(2)OFDM_程序阅读 本章详细阅读 LTE 标准中的 OFDM 帧结构和实现,讨论 OFDM信号的时-频映射和多种适应信道带宽的资源元 ...

  9. 数据结构自学笔记二、栈

    数据结构自学笔记二.栈 栈的定义 栈的作用 栈的顺序存储与随机存储 栈的基本功能的实现 先以顺序存储结构的栈为例. 然后再说说随机存储结构的栈吧 两栈共享空间 栈的一个重要应用--四则运算 算式的后缀 ...

最新文章

  1. 工作中InnoDB引擎数据库主从复制同步心得
  2. Android拖拽详解
  3. javac编译出现“找不到符号”和软件包不存在的解决
  4. SpringBoot中整合使用Freemarker
  5. 安装 PHP Memcache 扩展
  6. html异形轮播,异形滚动
  7. 基因治疗光明现,钾盐钠盐大混战;深度学习助力癌早筛,母亲多动降低后代甲基化...
  8. 又一波“打工人”财富自由!快手赴港上市,4000员工人均身家一夜涨至3000万...
  9. ADO+MFC数据库编程常用语句
  10. [转]2020 年最具潜力 44 个顶级开源项目,涵盖 11 类 AI 学习框架、平台(值得收藏)
  11. EXCEL保存“加载宏”
  12. 解决小程序图片上传问题
  13. 可以搜python题答案的app-可以搜Python题答案的APP有哪些?
  14. 在R和Python中求峰度和偏度
  15. Google Earth Engine(GEE)——1981年至今全球逐日降水数据集(最终版)
  16. 游戏开发入门(三)图形渲染
  17. android mvp设计思想,android MVP 设计模式
  18. 英语词频统计器分词器基于Java
  19. SDH通信网络时钟同步服务(NTP/PTP精密网络时钟源)精度分析
  20. 三分钟快速搭建分布式高可用的Redis集群

热门文章

  1. 用c语言赋值表示的例子,一起talk C栗子吧(第五回:C语言实例--数组巧妙赋值)...
  2. Javascript中数组的sort方法的分析
  3. Unable to compile class for JSP 的可能原因
  4. 【386天】跃迁之路——程序员高效学习方法论探索系列(实验阶段143-2018.02.26)...
  5. .Net Core下使用 RSA
  6. 2016.05.07华为网盘-将会暂停服务的网站一览 - 做好数据迁移的准备哦
  7. s3c6410烧写u-bootLinux
  8. 【转】学习理论,注重细节
  9. zlib源码导读[转]
  10. 04 | 事件调度层:为什么 EventLoop 是 Netty 的精髓?