数组

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. CMD命令名详细大全
  2. Flask实战2问答平台-父模板抽离(登录注册界面)
  3. #1097 : 最小生成树一·Prim算法
  4. 二阶自回归过程matlab,时间序列分析:二阶自回归过程
  5. Spring Boot 声明式事务 @Transactional 的使用
  6. Bash、Terminal通过tab忽略大小写自动补全命令行提示
  7. 心语收集8:若无缘,与之言多,亦废。若有缘,你的存在,就能惊醒他所有的感觉。...
  8. oracle占用内存 100,System表空间占用率100%,管理Oracle系统审计
  9. python求同构数
  10. airplay 协议开源资料整理
  11. 【WebIDE】 code-server 使用 vscode 原生插件市场地址
  12. Java桌面应用程序设计新贵:SWT 简介
  13. 青柠起始页-浏览器起始页(一个简洁、美观、实用的浏览器起始页。)
  14. ciscoVLAN配置典型案例,很实用。
  15. CSDN博客搬家知乎
  16. ev3编程变量模块_英文视频教学翻译-机器人ev3编程学习的第二十讲:举例讲解数据变量模块编...
  17. 中国居民收入调查数据库CHIPS
  18. linux 程序加启动项,linux 让一个程序开机自启动并把一个程序加为服务
  19. Discuz!教程之应用中心安装插件提示“数据下载错误(105)”的解决办法
  20. 杰理之4.0工具固件升级【篇】

热门文章

  1. Win10关闭windows defender杀毒软件的方法
  2. 文本居于图片左侧html,CSS实现图片与文本的居中对齐的常见方式
  3. php7.4 微信小程序获取手机号
  4. Spark dataframe【KV格式】模拟实现Map操作
  5. 2017.11.24
  6. xxx is not in the sudoers file 解决方案(转)
  7. 演讲|微软全球公共事业部政府行业总经理Mark Day:第四次工业革命的数字红利...
  8. C#编程(七十六)----------使用指针实现基于栈的高性能数组
  9. ecshop备份数据 ecshop转移数据 ecshop更换主机
  10. VMware View 4.5: 轻松击败竞争对手