C#高级编程 (第六版) 学习 第五章:数组
第五章 数组
1,简单数组
声明:int[] myArray;
初始化:myArray = new int[4]; 为数组分配内存。
还可以用如下的方法:
|
int[] myArray = new int[4]{1,2,3,4}; int[] myArray = new int[]{1,2,3,4}; int[] myArray = {1,2,3,4}; |
如果数组中的元素是引用类型,必须为每个数组分配内存:
|
public class Person { public string FirstName { get; set; } public string LastName { get; set; } public Person() { } public Person(string firstName, string lastName) { this.FirstName = firstName; this.LastName = lastName; } public override string ToString() { return String.Format("First name:{0}\nLast name:{1}", FirstName, LastName); } } |
|
Person[] myPersons = new Person[2]; myPersons[0] = new Person{"Ayrton","Senna"}; myPersons[1] = new Person{"Michael", "Schumacher"}; |
也可以
|
Person[] myPersons = {new Person("A","B")}; |
如果不用new,会报错。
2,多维数组
声明和使用多维数组:
|
int [,] twoDim = new int[3,3]; twoDim[0,0] = 1; twoDim[2,,2] = 10; |
数组声明之后,就不能改变其维数了。
3,锯齿数组
每一行都有不同的大小
|
int[][] jagged = new int[3][]; jagged[0] = new int[2]{1,2}; jagged[1] = new int[6]{1,2,3,4,5,6}; jagged[2] = new int[3]{1,2,3}; |
4, Array类
创建数组
|
Array myArray = Array.CreateInstance(typeof(int), 5); |
复制数组
实现了IClonable接口
Array.Clone():创建数组的浅表副本
Array.CopyTo:传送已有副本
排序:实现了IComparable接口
5,数组和集合接口
Array类实现了IEnumable、ICollection和IList接口
ICollection接口派生于IEnumable接口,添加了如下属性和方法
|
属性和方法 |
说明 |
|
Count |
集合中元素的个数,和Length相同 |
|
IsSynchronized SyncRoot |
IsSynchronized确定集合是否线程安全的。数组是false,对于同步访问,SyncRoot可以用于线程安全的访问 |
|
CopyTo |
将数组的元素复制到已有数组中,类似于静态的Array.CopyTo |
IList
IList接口派生于ICollection接口,
|
接口函数和属性 |
说明 |
|
Add() |
向集合中添加元素 |
|
Clear() |
清除数组中所有的元素 |
|
Contains() |
确定某个元素是否在数组中,返回为true或者false。 |
|
Indexof() |
对数组元素进行线性搜索,返回找到的第一个元素的索引。为找到返回-1. |
|
Insert() Remove() RemoveAll() |
对集合,插入,删除,删除全部。 对数组,不支持,抛异常。 |
|
IsFixedSize |
数组大小是固定的,返回true |
|
IsReadOnly |
是否可以读写 |
|
Item |
使用整型索引访问数组 |
6,枚举
IEnumerator接口
|
接口的方法和属性 |
说明 |
|
MoveNext() |
移动到集合的下一个元素上,有,true,结尾,false |
|
Currnet() |
返回光标所在的元素 |
|
Reset() |
将光标重新定位到开头 |
foreach语句解析
数组或者集合执行带GetEumerator()方法的IEnumerable接口。GetEnumerator返回一个执行IEnumerable接口的枚举。然后使用枚举迭代集合。
|
foreach(Person p in persons) { Console.WriteLine(p); } |
|
IEnumerator enumerator = persons.GetEnumerator(); while(enumerator.MoveNext()) { Person p = (Person)enumerator.Current; Console.WriteLine(p); } |
yield语句
C#2.0添加了yield语句,用于创建枚举器。
|
public class HelloCollection { public IEnumerator<string> GetEnumerator() { yield return "Hello"; yield return "World"; } } |
|
HelloCollection h = new HelloCollection(); foreach (string s in h) { Console.WriteLine(s); } |
C#高级编程 (第六版) 学习 第五章:数组的更多相关文章
- C#高级编程 (第六版) 学习 第七章:委托和事件
第七章 委托和事件 回调(callback)函数是Windows编程的一个重要方面,实际上是方法调用的指针,也称为函数指针. .Net以委托的形式实现了函数指针的概念,.Net的委托是类型安全的. 委 ...
- C#高级编程 (第六版) 学习 第四章:继承
第四章 继承 1,继承的类型 实现继承: 一个类派生于一个基类型,拥有该基类型所有成员字段和函数. 接口继承 一个类型只继承了函数的签名,没有继承任何实现代码. 2,实现继承 class MyDe ...
- C#高级编程 (第六版) 学习 第三章:对象和类型
第三章 对象和类型 1,类和结构 类存储在托管堆上 结构存储在堆栈上 2,类成员 类中的数据和函数称为类成员 数据成员 数据成员包括了字段.常量和事件 函数成员 方法:与某个类相关的函数,可以 ...
- C#高级编程 (第六版) 学习 第六章:运算符和类型强制转换
第六章 运算符和类型强制转换 1,运算符 类别 运算符 算术运算符 + - * / % 逻辑运算符 & | ^ ~ && || ! 字符串连接运算符 + 增量和减量运算符 ++ ...
- C#高级编程 (第六版) 学习 第一章:.Net体系结构
第一章 .Net体系结构 1,公共语言运行库(Common Language Runtime, CLR) .Net Framework的核心是其运行库的执行环境,称为公共语言运行库,或.Net运行库. ...
- C#高级编程(第六版)学习:第三十一章:Windows窗体
第三十一章 Windows窗体 创建Windows窗体应用程序 在文本编辑器中输入: /* * form.cs * a simple windows form * */ using System; u ...
- C#高级编程 (第六版) 学习 第二章:C#基础
第二章 基础 1,helloworld示例: helloworld.cs using System; using System.Collections.Generic; using System.Li ...
- c#高级编程第七版 学习笔记 第一章 .NET体系结构
第一章 .NET体系结构 本章内容: 编译和运行面向.NET的代码 Microsoft中间语言(Microsoft Intermediate Language,MSIL或简称IL)的优点 值 ...
- c#高级编程第七版 学习笔记 第二章 核心c#
第二章 核心C# 本章内容: 声明变量 变量的初始化和作用域 C#的预定义数据类型 在c#程序中使用条件语句.循环和跳转语句执行流 枚举 名称空间 Main()方法 基本的命令行c#编译器选项 使用S ...
随机推荐
- 浏览器内多个标签页之间的通信之storage
在一个标签页里面使用 localStorage.setItem(key,value)添加(修改.删除)内容: 在另一个标签页里面监听 storage 事件. 即可得到 localstorge 存储的值 ...
- php composer 实现类的自动加载
我们在开发项目中会经常用到第三方的类库插件,但是如果每次需要使用的时候都会在代码的某一处去引入,然后在实例化,这样做感觉很不方便,那么怎么实现自动加载呢,下面简单介绍使用composer实现自动加载: ...
- Home Assistant系列 -- 接入手机摄像头做实时监控和人脸识别
准备一部废旧(土豪忽略,主要是穷)的.摄像头还是好的手机做监控设备,(Android 和iPhone都行)当Home Assistant 获得实时的视频流后,可以接入各种图像处理组件完成人脸识别,动作 ...
- 课程 python 文件操作复习
# 文件处理 # 打开文件 #open('路径','打开方式','指定编码方式') # 打开方式 r w a r+ w+ a+ b #r+ 打开文件直接写 和读完再写 # 编码方式 —— utf-8 ...
- structc 开源框架简介
了解 structc-https://github.com/wangzhione/structc structc 是 C 构建基础项目框架. 不是太惊艳, 但绝对是 C 简单项目中一股清流. 它的前身 ...
- 解决$ go get google.golang.org/grpc上的包被墙的问题
今天get grpc包的时候 $ go get google.golang.org/grpc 发现拉不下来被墙了,在github.com上搜索grpc,clone到工程目录中,运行命令 go inst ...
- R语言学习笔记(二十一五):如何如何提升R语言运算的性能以及速度
在R中获得快速运行代码的方法 使用向量化运算 R语言的并行计算可以用parallel和foreach包 加快R运行速度还可以使用cmpfun()函数即字节码编译器 再者就是在R中调用C或C++ 同时还 ...
- [arc068E]Snuke Line-[树状数组]
Description 传送门 Solution 假如想直接YY对于每一个d会有多少种商品满足条件,em反正我搞不定. 然后大佬的题解告诉我说:搞不定?那就不搞它啊,反过来不就得了? 好吧.我们来考虑 ...
- 解决数据库SUSPECT(置疑)状态
在虚拟机中运行数据库不小心强制关机了,结果有一个重要的数据库后面加上了一个suspect的关键字,在管理器中打不开,程序也不能运行. 网上有很多分析的方法,试了一些不管用,最后用这种方法解决了,记录一 ...
- python-面向对象-内置方法补充
__del__item系列 __getitem__ __setitem__ __delitem____hash____eq__ 构造方法 申请一个空间析构方法 释放一个空间之前执行某对象借用了操作系统 ...