第二十一,二十二天
(昨天咖啡喝浓了头居然发热了)
(今天继续学习)
9.1.3 格式字符串
例:
double d=13.45;
int i=45;
Console.WriteLine("{0,10:E} {1}",d,i);
常见格式说明符
C 数字类型 特点地区的货币值
D 只用于整数类型 一般的整数
E 数字类型 科学计数法
F 数字类型 小数点后的位数固定
G 数字类型
9.2正则表达式略
第十章:集合
集合的接口:
IEnumerable<T> 如果foreach语句用于集合,就需要IEnumerable接口。这个接口定义了方法GetEnumerable(),它返回了一个实现了IEnumerable接口的枚举
ICollection<T> ICollection<T>接口由泛型集合类实现,使用这个接口可以获得集合中的元素个数(Count属性),把集合复制到数组中(CopyTo()方法),还可以从集合中添加和删除元素(Add(),Remove(),Clear())
IList<T> IList<T>接口用于可通过位置访问其中的元素列表,这个接口定义了一个索引器,可以在集合的指定位置插入或删除某些项(Insert()和RemoveAt()方法)。IList<T>接口派生自ICollection<T>接口
ISet<T> ISet<T>接口由集实现,集允许合并不同的集,获得两个集的交集,检查两个集是否重叠。ISet<T>派生自ICollection<T>
IDirection<TKey,TValue> 该接口由包含键和值的泛型集合类实现。使用这个接口可以访问所有的键和值,使用键类型的索引器可以访问某些项,还可以添加或删除某些项
ILookup(TKey,TValue) 该接口类似于IDirection<TKey,TValue>接口,实现该接口的集合有键和值,且可以通过一个键包含多个值。
IComparer<T> 接口IComparer<T>由比较器实现,通过Compare()方法给集合中的元素排序。
IEqualityComparer<T> 接口IEqualityComparer<T>由一个比较器实现,该比较器可用于字典中的键。使用这个接口,可以对对象进行相等性比较。从.NET4开始,这个接口也由数组和元组实现。
IProducerConsumerCollection<T> 该接口是.NET4中新增的,它支持新的线程安全的集合类。
10.3列表
动态列表提供了泛型类List<T>。这个类实现了IList,ICollection,IEnumerable,IList<T>,ICollection<T>,IEnumerable<T>
10.3.1 创建列表
var intList=new List<int>();
var racers=new List<Racer>(); //Racer是一个类
List<int> intList2=new List<int>(10); //容量为10,不足翻
使用Capacity属性可以获取和设置集合的容量
intList.Capacity=20;
集合中的元素个数可以用Count属性读取。
不再添加时,用TrimExcess()方法,去除不需要的容量。
1 集合初始值设定项
var intList=new List<int>(){1,2};
……
2 添加元素
intList.Add(1);
3 插入元素
stringList.Insert(1,"abc");
4 访问元素
可直接用索引器,intList[0]
由于List<T>集合类实现了IEnumerable接口,所以可用foreach
List<T>类还提供了ForEach()方法,该方法用Action<T>参数声明
public void Foreach(Action<T> action);
……
5删除元素
intList.RemoveAt(3);
也可用Remove(),但这个会先进行搜索
6搜索
可以使用的有:IndexOf(),LastIndexOf(),FindIndex(),FindLastIndex(),Find()和FindLast().
若只检查是元素是否存在,能用Exists()方法
7排序
可以使用Sort()方法对元素进行排序.Sort()使用快速排序算法。
Sort()有几个重载方法:
public void List<T>.Sort();
public void List<T>.Sort(Comparison<T>);
public void List<T>.Sort(IComparer<T>);
public void List<T>.Sort(Int32,Int32,IComparer<T>);
只有集合中的元素实现了IComparable接口,才能使用不带参数的Sort()方法。
8类型转换
使用List<T>类的ConvertAll<TOutput>()方法,可以把所有类型的集合转换为另一种类型。
ConvertAll<TOutput>()方法使用一个Converter委托,该委托的定义如下:
public sealed delegate TOutput Converter<TInput,TOutput>(Tinput from);
10.3.2 只读集合
List<T>集合的AsReadOnly()方法返回ReadOnlyCollection<T>类型的对象,该类实现的接口与List<T>集合相同,但所有修改集合的方法和属性都抛出NotSupportedException.
10.4队列
FIFO先进先出
队列使用System.Collections.Generic名称空间中的泛型类Queue<T>实现,它实现了ICollection和IEnumerable<T>接口,但没有实现ICollection<T>接口,因为这个接口Add()和Remove()方法不能用于队列。
因为Queue<T>类没有实现IList<T>接口,所以不能用索引器访问队列。
Queue<T>类的成员
Count 返回队列中的元素个数
Enqueue 在队列一端添加一个元素
Dequeue 在队列的头部读取和删除一个元素,如果没元素就抛出一个InvalidOperationException类型的异常
Peek 在队列的头部读取一个元素,但不删除
TrimExcess 重新设置队列的容量。Dequeue不会重置容量
10.5栈
Statck<T>实现了IEnumerable<T>和ICollection接口
Count 返回栈中的元素个数
Push 在栈顶添加一个元素
Pop 从栈顶删除一个元素,并返回该元素,如果栈是空的,就抛出InvalidOperationException异常
Peek 返回栈顶的元素,但不删除它
Contains 确定某个元素是否在栈中,如果是,就返回true
(2014.12.24)
(昨天咖啡喝浓了头居然发热了)
(今天继续学习)
9.1.3 格式字符串
例:
double d=13.45;
int i=45;
Console.WriteLine("{0,10:E} {1}",d,i);
常见格式说明符
C 数字类型 特点地区的货币值
D 只用于整数类型 一般的整数
E 数字类型 科学计数法
F 数字类型 小数点后的位数固定
G 数字类型
9.2正则表达式略
第十章:集合
集合的接口:
IEnumerable<T> 如果foreach语句用于集合,就需要IEnumerable接口。这个接口定义了方法GetEnumerable(),它返回了一个实现了IEnumerable接口的枚举
ICollection<T> ICollection<T>接口由泛型集合类实现,使用这个接口可以获得集合中的元素个数(Count属性),把集合复制到数组中(CopyTo()方法),还可以从集合中添加和删除元素(Add(),Remove(),Clear())
IList<T> IList<T>接口用于可通过位置访问其中的元素列表,这个接口定义了一个索引器,可以在集合的指定位置插入或删除某些项(Insert()和RemoveAt()方法)。IList<T>接口派生自ICollection<T>接口
ISet<T> ISet<T>接口由集实现,集允许合并不同的集,获得两个集的交集,检查两个集是否重叠。ISet<T>派生自ICollection<T>
IDirection<TKey,TValue> 该接口由包含键和值的泛型集合类实现。使用这个接口可以访问所有的键和值,使用键类型的索引器可以访问某些项,还可以添加或删除某些项
ILookup(TKey,TValue) 该接口类似于IDirection<TKey,TValue>接口,实现该接口的集合有键和值,且可以通过一个键包含多个值。
IComparer<T> 接口IComparer<T>由比较器实现,通过Compare()方法给集合中的元素排序。
IEqualityComparer<T> 接口IEqualityComparer<T>由一个比较器实现,该比较器可用于字典中的键。使用这个接口,可以对对象进行相等性比较。从.NET4开始,这个接口也由数组和元组实现。
IProducerConsumerCollection<T> 该接口是.NET4中新增的,它支持新的线程安全的集合类。
10.3列表
动态列表提供了泛型类List<T>。这个类实现了IList,ICollection,IEnumerable,IList<T>,ICollection<T>,IEnumerable<T>
10.3.1 创建列表
var intList=new List<int>();
var racers=new List<Racer>(); //Racer是一个类
List<int> intList2=new List<int>(10); //容量为10,不足翻
使用Capacity属性可以获取和设置集合的容量
intList.Capacity=20;
集合中的元素个数可以用Count属性读取。
不再添加时,用TrimExcess()方法,去除不需要的容量。
1 集合初始值设定项
var intList=new List<int>(){1,2};
……
2 添加元素
intList.Add(1);
3 插入元素
stringList.Insert(1,"abc");
4 访问元素
可直接用索引器,intList[0]
由于List<T>集合类实现了IEnumerable接口,所以可用foreach
List<T>类还提供了ForEach()方法,该方法用Action<T>参数声明
public void Foreach(Action<T> action);
……
5删除元素
intList.RemoveAt(3);
也可用Remove(),但这个会先进行搜索
6搜索
可以使用的有:IndexOf(),LastIndexOf(),FindIndex(),FindLastIndex(),Find()和FindLast().
若只检查是元素是否存在,能用Exists()方法
7排序
可以使用Sort()方法对元素进行排序.Sort()使用快速排序算法。
Sort()有几个重载方法:
public void List<T>.Sort();
public void List<T>.Sort(Comparison<T>);
public void List<T>.Sort(IComparer<T>);
public void List<T>.Sort(Int32,Int32,IComparer<T>);
只有集合中的元素实现了IComparable接口,才能使用不带参数的Sort()方法。
8类型转换
使用List<T>类的ConvertAll<TOutput>()方法,可以把所有类型的集合转换为另一种类型。
ConvertAll<TOutput>()方法使用一个Converter委托,该委托的定义如下:
public sealed delegate TOutput Converter<TInput,TOutput>(Tinput from);
10.3.2 只读集合
List<T>集合的AsReadOnly()方法返回ReadOnlyCollection<T>类型的对象,该类实现的接口与List<T>集合相同,但所有修改集合的方法和属性都抛出NotSupportedException.
10.4队列
FIFO先进先出
队列使用System.Collections.Generic名称空间中的泛型类Queue<T>实现,它实现了ICollection和IEnumerable<T>接口,但没有实现ICollection<T>接口,因为这个接口Add()和Remove()方法不能用于队列。
因为Queue<T>类没有实现IList<T>接口,所以不能用索引器访问队列。
Queue<T>类的成员
Count 返回队列中的元素个数
Enqueue 在队列一端添加一个元素
Dequeue 在队列的头部读取和删除一个元素,如果没元素就抛出一个InvalidOperationException类型的异常
Peek 在队列的头部读取一个元素,但不删除
TrimExcess 重新设置队列的容量。Dequeue不会重置容量
10.5栈
Statck<T>实现了IEnumerable<T>和ICollection接口
Count 返回栈中的元素个数
Push 在栈顶添加一个元素
Pop 从栈顶删除一个元素,并返回该元素,如果栈是空的,就抛出InvalidOperationException异常
Peek 返回栈顶的元素,但不删除它
Contains 确定某个元素是否在栈中,如果是,就返回true
(2014.12.24)