|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115 |
- >集合接口和类型
- - 大多数接口都可在System.Collections和System.Collections.Generic名称空间中找到。泛型集合类位于System.Collections.Generic名称空间中;
-
- **接口及说明**
- - IEnumerable<T>:如果将foreach语句用于集合,就需要IEnumerable接口,这个接口定义了方法GetEnumerator(),它返回一个实现了IEnumerator接口的枚举。
- - ICollection<T>:ICollection<T>接口由泛型集合实现。使用这个接口可以获得集合中的元素个数,把集合复制到数组中(CopyTo()方法),还可以从集合中添加和删除元素(Add()、Remove()、Clear())
- - IList<T>:用于可通过位置访问其中的元素列表,这个接口定义了一个索引器,可以在集合的指定位置插入或删除某些项(Insert()和RemoveAt()方法).IList<T>接口派生自ICollection<T>接口
- - ISet<T>:该接口由集实现。集允许合并不同的集,获得两个集的交集,检查两个集是否重叠。ISet<T>接口派生自ICollection<T>接口
- - IDictionary<TKey,TValue>:由包含键和值得泛型集合类实现。使用这个接口可以访问所有的键和值,使用键类型的索引器可以访问某些项,还可以添加或删除某些项
- - ILookup<TKey,TValue>:类似于IDictionary<TKey,TValue>接口,实现该接口的集合有键和值,且可以通过一个键包含多个值
- - IComparer<T>:由比较器实现,通过Comparer()方法给集合中的元素排序
- - IEqualityComparer<T>:由一个比较器实现,该比较器可用于字典中的键,使用这个接口,可以对对象进行相等性比较
-
-
- > 列表
-
- - 例子:将Racer类中的成员用作要添加到集合中的元素,以表示一级方程式的一位赛车手。这个类有5个属性:Id、Firstname、Lastname、Country和Wins的次数。在该类的构造函数中,可以传递赛车手的姓名和获胜次数,以设置成员。重写ToString()是为了返回赛车手的姓名。Racer类也实现了泛型接口IComparable<T>,为Racer类中的元素排序,还实现了IFormattable接口
- ```
- public class Racer:IComparable<Racer>,IFormattable
- {
- public int Id{get;}
- public string FirstName{get;set;}
- public string LastName{get;set;}
- public string Country{get;set;}
- public int Wins{get;set;}
-
- public Racer(int id,string firstName,string lastName,string country):this(id,firstName,lastName,country,wens:0)
- {}
- public Racer(int id,string firstName,string lastName,string country,int wins)
- {
- Id=id;
- FirstName=firstName;
- LastName=lastName;
- Country=country;
- Wins=wins;
- }
- public override string ToString()=>$"{FirstName}{LastName}";
- public string ToString(string format,IFormatProvider formatProvider)
- {
- if(format==null)format="N";
- switch {format.ToUpper()}
- {
- case "N":
- return ToString();
- case "F":
- return FirstName;
- case "L"
- return LastName;
- case "W"
- return $"{ToString()},Wins:{Wins}";
- case "C":
- return $"{ToString()},Country:{Country}",
- case "A"
- return $"{ToString()},Country:{Country} Wins:{Wins}";
- default:
- throw new FormatException(String.Format(formatProvider,$"Format(format)is not supported"));
- }
- }
- public string ToString(string format)=>ToString(format,null);
- public int CompareTo(Racer other)
- {
- int compare=LastName?.CompareTo(other?.LastName)??-1;
- if(compare==0)
- {
- return FirstName?.CompareTo(other?.FirstName)??-1;
- }
- return compare;
- }
- }
- ```
-
- > 创建列表
- - 集合初始值设定项
- ```
- var intList=new List<int>(){1,2};
- var stringList=new List<string>(){"one","two"};
- ```
- - 添加元素
- - 使用Add()方法可以给列表添加元素
- ```
- var intList=new List<int>();
- intList.Add(1);
- intList.Add(2);
-
- var stringList=new List<string>();
- stringList.Add("one");
- stringList.Add("two");
- ```
- - 插入元素
- ```
- racers.Insert(3,new Racer(6,"Phil","Hill","USA",3));
- 方法InsertRange()提供了插入大量元素的功能,类似于前面的AddRanger()方法。
- ```
-
- - 访问元素
- - 实现了IList和IList<T>接口的所有类都提供了一个索引器,所以可以使用索引器,通过传递元素号来访问元素。
- - 可以使用Count属性确定元素个数,再使用for循环遍历集合中的每个元素,并使用索引器访问每一项:
- ```
- for (int i=0;i<racers.Count;i++>)
- {
- WriteLine(racers[i]);
- }
- ```
- - 因为List<T>集合类实现了IEnumerable接口,所以也可以使用foreach语句遍历集合中的元素
- ```
- foreach(var r in racers)
- {
- WriteLine(r);
- }
- ```
- - 删除元素
- - 搜索
-
-
-
|