集合(Collection)
命名空间System.Collections;
命名空间System.Collections.Generic;
- 集合相关的一些接口:
IEnumerable<T>
–如果要将foreach语句用于集合,就需要IEnumerable接口。
ICollection<T>
–由泛型集合类实现。使用这个接口可以获取集合元素个数、复制到数组、添加和删除元素。
IList<T>
–用于可通过位置访问其中的元素列表。这个接口定义了索引器。可以在指定位置Insert或RemoveAt。
ISet<T>
–由集实现,集允许合并不同的集,可以获取交集、检查重叠。(包含不重复元素的集合称为集(Set))
IDictionary<TK,TV>
–包含由键值的泛型集合类实现。
ILookup<TK,TV>
–类似IDictionary,且可以通过一个键包含多个值。
……
- 常用集合:
List<>
–动态列表/动态数组
LinkedList<>
–双向链表
SortedList<>
–有序列表,按照键给元素排序
Dictionary<>
–字典(散列表)
Queue<>
–队列
Stack<>
–栈
SortedDictionary<>
–二叉搜索树,其中的元素根据键来排序。
HashSet<T>
–HashSet<>集包含不重复元素的无序列表
SortedSet<T>
–SortedSet<>集包含不重复元素的有序列表
非泛型的:
ArrayList
HashTable
- 元组(Tuple)
数组合并了相同类型的对象,而元组合并了不同类型的对象。
元组起源于函数式编程,这些语言频繁使用元组。.NET Framework定义了8个泛型Tuple类和一个静态Tuple类。
索引器
CRE:索引器类似C++的下标运算符。
声明:
public TR this[int index] {get; set;}
迭代
IEnumerator接口
?:枚举器和迭代器关系是:迭代器是指包含多个
yield return
的语句。枚举器是由迭代器代码返回的。
?:枚举器是迭代器的一种,用于遍历所有元素。
?:foreach
语句是枚举器的使用者。即实现了IEnumerable接口才能用foreach
遍历。
- 它有三个成员:
Current
、MoveNext()
、Reset()
。
- 可枚举类的实现:
public MyCollection: IEnumberable
{
public IEnumerator GetEnumerator()
{
//...
yield return xxx;
//....
}
}
- 手动遍历:
IEnumerator it = list.GetEnumerator();
while(it.MoveNext())
{
Console.WriteLine(it.Current);
}
yield语句
C#2.0添加了yield
语句,以便创建枚举器。yield return
语句返回集合的一个元素。yield break;
可停止迭代。
使用迭代块,编译器会生成一个yield类型,其中包含一个状态机。
- 补充
IEnumerator的yield return之间还可以执行代码,每MoveNext()就会执行中间的语句。
CRE:利用这个特性可以实现协程。在Unity中使用较多。
(END)