C#高级编程 第一章:数组和集合/**/
//using System.Collections
//数组定义与初始化
1、值类型:int[]mylntArray={5,9,10,2,99}; //直接初始化
2、指定数组的大小,再用关键字new初始化所有数组元素
int[]myIntArray=new int[5]; //默认全为0
student [] x =new student[20]; //面向对象默认全为null
//System.Array
!Array是一个抽象类不能用new来实例化!
System.Array可以执行各种操作,如存储、检索、排序和反转
//创建数组:Array obj = Array.CreateInstance(typeof(string)/*指定数组类型*/,10/*长度*/); /*如指定多维数组则在“10”后加“,数字......”*/
Array.CreateInstance(type/*为Array的类型*/,Int32[]/*(和type两个类型不一样)放入一个指定好的数组(可指定Array的类型和长度多维也一样)*/)
//System.Array的属性和方法
属性:(*为常用)
{
* length:数组长度
* Rand: 数组维度
IsReadOnly:获取一个值,该值指示Array是否为只读(返回值是bool类型的)
IsFixedsize:获得一个值,该值指示Array是否具有固定的大小,具有固定大小的数组在创建之后不允许添加或移除元素只允许修改现有的元素
}
方法:(*为常用)
{
* CreateInstance /*创建数组时用*/
GetLowerBound:获取Array中指定维度的下限{
GetLowerBound(0)返回Array的第一维的索引下限
GetLowerBound(Rank-1)返回Array的最后一维的下限
}
GetUpperBound:获取Array的指定维度的上限 同上
/*Array myIDIntArray=Array.CreateInstance(typeof(int32),5);*/
/* rank:0 GetLowerBound:0 GetUpperBound:4*/
!注意:Array不能用[]取值赋值!
SetValue:{ /*Array myUserInfo = Array.CreateInstance(typeof(string),10);*/
GetValue:{ /*赋值:myUserInfo.SetValue("a"/*值*/,0/*索引号*/)*/
/*取值:myUserInfo.GetValue(i/*索引号*/)*/
}
GetLength: /*GetLength(0)为GetLength的一个示例它返回Array的第一个维中的元素个数*/
Indexof: /*得到数组中的某一元素的索引号*/
则 a=0 → int a = Array.IndexOf(myArray/*数组名*/,"the"/*元素(索引=0)*/);
Array.Reverse:反转整个一维Array中的元素的顺序
{
Array.Reverse(数组名)
Array.Reverse(数组名,0,3) //反转部分元素顺序
}
sort:排序 //Array.Sort(数组名)
clear:将所有元素清空
Array.copy :将一个Array的一部分元素复制到另一个Array中,根据需要执行类型强制转换和装箱 { Array.copy(Array/*原数组*/,array/*目标数组*/,Int32/*数字:从哪开始复制*/)
Array.Copyto :将当前一维Array的所有元素复制到指定的一维Array中 { Array.copyto(Array/*目标数组*/,Int32/*数字:从哪开始复制*/)
Array.copy 和 Array.copyto可以相互替换 没什么区别
}
//集合:原则上是无序的没有类型限制的 集合类在访问时实则是有序的
//!Hashtable是字典型集合!
//声明:Hashtable objfriendDetails=new Hashtable();
//属性
{
count ← 获得Hashtable键值对总数
keys
Values
}
//方法
{
Add ← 添加Add(键/*不能重复 如果重复则引发ArgumentException 所以要用try catch*/,值)
GetEnumerator //获得枚举器
Remove
}
//查询值时 :(类型) hashtable[key] /*因为是object类型的所以要强制转换*/
//ArrayList 特点:1、 ArrayList类的Capacity可以动态扩展
2、所有类型的元素都能放
//ArrayList a =new ArrayList(20)
↑
初始容量 数字若换成一个数组则可将此数组储存到新数组中(重载)
//属性
{
Capacity :获取或设置集合的容量
Count :获得集合内容总数
}
//方法
{
Add :添加数据方法 new名.Add("...")
Contains :确定某元素是否在集合中 myStudentInfo.Contains(/*查找内容 找到返回trun 否则返回 false*/) //不用foreach遍历
↑
new名
insert :将元素插入到集合的指定索引处 mystuInfo.Insert(0/*索引*/,"...."/*内容*/)
Remove :删除集合中的数据 new名.Remove(/*内容*/) ← 把“内容”删除
RemoveAt :移除集合的指定索引处的元素 new名.RemoveAt(/*索引号*/) ← 把索引号处的内容删除
TrimToSize :将容量设置为集合中的元素的实际数目 new名.TrimToSize();
Indexof :返回内容所在的索引 mystudentInfo.IndexOf(/*内容*/)
}
//SortedList 相当于 ArrayList + Hashtable
//访问方法 :键值 或 索引
SortedList a = new SortedList();
赋值: a.Add(键,值)
取值 : 一般用 foreach
Console.WriteLine(a[键].toString());
//例子 : SortedList obj =new SortedList();
obj.Add("1991",new car("1991","宝马"));
↑
类
//队列(Queues) 先进先出 /*就像排队买东西*/
Queue myQueue =new Queue();
//添加: myQueue.Enqueue("/*内容*/");
myQueue.Count ← 总数据条数
myQueue.Dequeue();
//Dequeue 是显示数据方法,每次显示集合中的第一个值
//注意:Dequeue 返回队列中的第一个对象,之后把它从集合中删除
//方法:
{
clear :删除集合中的所有数据
clone :创建集合的浅度拷贝
Copyto :把集合复制到已有的一维数组中
GetEnumerator :给集合返回一个枚举
Peek :返回队列中最上面的元素,但不把它从集合中删除
ToArray :把队列复制到一个新的数组中
Contains :确定某个元素是否在集合中
Dequeue : 返回队列中的第一个对象,之后把它从集合中删除
Enqueue : 添加
}
//栈(stacks) 先进后出 /*就像子弹上膛*/
stack mystack = new stack();
//添加 : mystack.push("/*要添加的内容*/");
mystack.Count :获取数据总数
//stack 类常用方法
{
clear :删除集合中的所有数据
clone :创建集合的浅度拷贝
Copyto :把集合复制到已有的一维数组中
GetEnumerator :给集合返回一个枚举
Peek :返回队列中最上面的元素,但不把它从集合中删除
ToArray :把队列复制到一个新的数组中
pop :返回栈中最上面的元素,之后把它从集合中删除 Console.WriteLine(mystack.pop().Tostring());
}
//集合接口
{
IEnumerable : 可以使用 foreach 语句遍历该集合
Icollection : 被所有的集合类实现,提供方法 CopyTo() 和 Count 属性
IComparer : 提供集合中两个对象的比较,以便集合排序
Ilist : 被通过数组索引的集合实现
IDictionary : 被Key/value - based 型集合,如 Hashtable 和 sortedlist 实现
}
///例子(经典)
书上的练习1
SortedList objCarDetails = new sortedlist();
objcarDetails.Add("1991", new car("1991","宝马"));
↑
先实例化
//排序
{
重载
↓
Arraylist akeys = new Arraylist(objcarDetails.keys);
akeys.sort();
foreach(string akey in akeys)
{
car objcar = (car) objcarDetails[akey]
↑
等用时再用一个“类”类型的变量接受
Console.WriteLine(objcar.Name);
↑
属性
}
}
sortedlist 的 IndexofKey 方法可以得到索引号,GetbyIndex 方法通过索引找出对象