《csharp高级编程》 学习笔记 第五章 数组

第五章 数组
5.1  简单数组


5.1.1 数组的声明
int [] myArray;


5.1.2 数组的初始化
myArray=new int [4];
int[] myArray = new int[4] {4, 7, 11, 2};
int[] myArray = new int[] {4, 7, 11, 2};
int[] myArray = {4, 7, 11, 2};


5.1.3 访问数组元素
for (int i = 0; i < myArray.Length; i++)
{
Console.WriteLine(myArray[i]);
}
等价于
foreach (int val in myArray)
{
Console.WriteLine(val);
}
5.1.4 使用引用类型
Person[] myPersons = new Person[2];
Person[] myPersons = {new Person("Ayrton", "Senna"),
new Person("Michael", "Schumacher") };


5.2 多维数组


int[,] twodim = new int[3, 3];//二维数组
twodim[0,0] = 1;
twodim[2,2] = 9;
数组在初始化时应指定每一维的大小(也称为阶)
提示:
数组声明之后,就不能修改其阶数。
int[,] twodim = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9},
};


5.3 锯齿数组
每一行都可以有不同的大小。
int[][] jagged = new int[3][];
jagged[0] = new int[2] {1, 2};
jagged[1] = new int[6] {3, 4, 5, 6, 7, 8};
jagged[2] = new int[3] {9, 10, 11};


5.4 Array类
用括号声明数组是csharp中使用Array类的记号。
在后台使用csharp语法,会创建一个派生于抽象基类Array的新类。
例如前面使用的Length属性。


5.4.1 属性
5.4.2 创建数组
Array类是一个抽象类,所以不能使用构造函数来创建数组。
不过除了使用csharp语法创建数组实例之外,
还可以使用静态方法CreateInstance()创建数组。
Array intArray1 = Array.CreateInstance(typeof(int), 5);
for (int i = 0; i < 5; i++)
{
intArray1.SetValue(33, i);
}
还可以将已创建的数组强制转换成声明为int[]的数组:
int[] intArray2 = (int[])intArray1;
CreateInstance()方法有许多重载版本,可以创建多维数组和不基于0 的数组。
用到的时候再查msdn。


5.4.3 复制数组
牢记数组是引用类型。
所以将一个数组变量赋予另一个数组变量,就会得到两个指向同一个数组的变量。
而复制数组,要使数组实现ICloeable 接口。
这个接口定义的Clone()方法会创建数组的浅副本:
*如果数组的元素是值类型,就会复制所有的值。
*如果数组包含引用类型,只复制引用,不复制元素。


还可以使用Array.Copy()方法创建浅副本。
但两者有重要区别:
Clone()方法会创建一个新数组,而Copy()方法只是传送了阶数相同,有足够元素空间的已有数组。
*注意:
如果需要包含引用类型的数组的深副本,就必须迭代数组,创建新对象。


5.4.4 排序
Array类实现了对数组中元素的冒泡排序。
Sort()方法需要数组中的元素实现IComparable接口。
*提示:
Array类还提供Sort方法,它需要将一个委托作为变元。


5.5 数组和集合接口
5.6 枚举
在foreach语句中使用枚举,可以迭代集合中的元素。
且无需知道集合中的元素个数。
5.6.1 IEnumerator 接口
5.6.2 foreach语句
foreach使用IEnumerator接口的属性和方法。
5.6.3 yield语句
c# 2.0 添加了yield语句,以便于创建枚举器。
yield return 语句返回集合的一个元素,并移动到下一个元素上。
yield break 可停止迭代。
public class HelloCollection
{
public IEumerator GetEumerator()
{
yield return "Hello";
yield return "World";
}
}
*包含yield 语句的方法或属性也称为迭代块。
迭代块必须声明为返回IEnumerator 或IEnumerable接口。
这个块可以包含多个yield return 语句或yield break 语句,但不能包含return 语句。
现在就可以用foreach语句迭代集合:
HelloCollection helloCollection = new HelloCollection();
foreach (string s in helloCollection)
{
Console.WriteLine(s);
}
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值