哎呀我去,昨天搞那个全排列和寻路算法搞得我脑袋都大了,忘写博了,唉 ,早起补上。。。。。。。
今天的东西挺多,但没什么难度。
集合:创建和管理相关对象组的第?种?式就是:创建对象集合。
集合提供?种灵活的处理?法。 与数组不同,处理的对
象组可根据程序更改的需要动态地增?和收缩。 对于某
些集合,您可以为放?该集合的任何对象分配?个“键”,
以便使?该键快速检索对象。
注意: 集合是类,因此必须声明新集合后,才能向该集合
中添加元素。集合分为两种类型: ?泛型集合和泛型集合。
使??泛型集合的 需引?: System.Collections命名空间。
使?泛型集合需引?: System.Collections.Generic命名
空间。
stack:Stack称为栈,栈和队列?常相似,只不过队列是先进
先出,?栈中的数据添加和移除都在?端进?,遵守栈
中的数据则后进先出。 Stack类实现了ICollection和
IEnumerable接?。 定义如下:
Stack stack = new Stack(); Stack<int> stackInt = new Stack<int>();
Push() 将对象插?Stack的顶部。(?栈操作)
Pop() 移除并返回Stack顶部的对象 。(出栈操作)
Peek() 返回位于Stack顶部的对象,但不移除。
Contains() 确定某元素是否在Stack中。
Clear() 从Stack中移除所有对象。
Count 获取Stack中包含的元素。
1.后进先出( LIFO)的?种数据结构。
2.随着向 Stack 中添加元素,容量通过重新分配按需?动
增加。
3.Stack 接受 null 作为有效值并且允许重复的元素。
Queue:Queue称为队列,队列是这样?种数据结构,数据有列
表的?端插?,并由列表的另?端移除。就像单?道,
只能从?段进,从?端出。 Queue类同样也是实现了
ICollection和IEnumerable接?。
Queue queue = new Queue(); Queue<string> queueString = new Queue<string>();
Enqueue() 将对象添加到 Queue 的结尾处。
Dequeue() 移除并返回位于 Queue 开始处的对象。
Peek() 返回位于 Queue 开始处的对象但不将其移除。
Clear() 从 Queue 中移除所有对象。
Contains() 确定某元素是否在 Queue 中。
Count 获取 Queue 中包含的元素数。
1.先进先出( FIFO)的?种数据结构。
2.随着向Queue 中添加元素,容量通过重新分配按需?动增加。 可通过调? TrimToSize 来减少容量。
3.Stack 接受 null 作为有效值并且允许重复的元素。
4.在AI寻路算法中经常?的Queue。
Dictionary:Dictionary<TKey, TValue> 类称为字典类,表?键和
值的集合。其中TKey表?字典中的类型, Tvalue表?
字典中的值类型。 Dictionary类实现了ICollection、
IEnumerable、 IDictionary·接?。 定义如下:
Dictionary<string, int> dic = new Dictionary<string, int>();
Add() 将指定的键和值添加到字典中。
TryGetValue() 获取与指定的键相关联的值。
Clear() 从 Dictionary<TKey, TValue> 中移除所有的键和值。
Remove() 从 Dictionary<TKey, TValue> 中移除所指定的键的值。
ContainsKey() 确定 Dictionary<TKey, TValue> 是否包含指定的键。
ContainsValue() 确定 Dictionary<TKey, TValue> 是否包含特定值。
Count 获取Stack中包含的元素。
Keys 获取包含 Dictionary<TKey, TValue> 中的键的集合。
Values 获取包含 Dictionary<TKey, TValue> 中的值的集合。
1.字典是?个泛型集合。
2.TKey必须唯?。
3.Value可以是变量,也可以是对象。
ArrayList:是?个特殊的数组。通过添加和删除元素,就可
以动态改变数组的?度。 ArrayList并不是强类型, ArrayList
可能并不总是提供特定任务的最佳性能。 ArrayList类实现了
IList、 ICollection和IEnumerable接?。 定义如下:
ArrayList arraylist = new ArrayList();
Add() 将对象添加到 ArrayList 的结尾处。
Insert() 将元素插? ArrayList 的指定索引处。
Remove() 从 ArrayList 中移除特定对象的第?个匹配项。
RemoveAt() 移除 ArrayList 的指定索引处的元素。
Reverse() 将整个 ArrayList 中元素的顺序反转。
Contains() 确定某元素是否在ArrayList中。
Clear() 从 ArrayList 中移除所有元素。
Count 获取Stack中包含的元素。
1.?持?动改变??的功能。
2.可以灵活的插?元素、删除元素、访问元素。
3.不是强类型,速度跟数组?起来要慢。
List<T>类:表?可通过索引访问的对象的强类型列表。 提供?
于对列表进?搜索、排序和操作的?法。 List<T>是ArrayList
类的泛型等效类,该类使???可按需动态增加的数组实现
IList<T>泛型接?。 List<T>类同样也是实现了ICollection、
IEnumerable和IList接?。 定义如下:
List<int> list = new List<int>();
Add() 将对象添加到 List<T> 的结尾处。
Insert() 将元素插? List<T> 的指定索引处。
Remove() 从 List<T> 中移除特定对象的第?个匹配项。
RemoveAt() 从 List<T> 中移除特定对象的第?个匹配项。
RemoveAll() 移除与指定的谓词所定义的条件相匹配的所有元素。
Reverse() 将整个 List<T> 中元素的顺序反转。
IndexOf(T) 搜索指定的对象,并返回整个 List<T> 中第?个匹配项
Sort() 的从零开始的索引。 使?默认?较器对整个 List<T> 中的元素进?排序。
Contains() 确定某元素是否在ArrayList中。
Clear() 从 List<T>中移除所有元素。
Count 获取Stack中包含的元素。
1.于ArrayList相?, List<T>好并且是类型安全的。
2. 若List<T> 类的类型 T 使?是完全相同的。 但是,如果要考虑实现和装箱问题。
//在一个有限平面区域上(1000 * 1000)随机生成有序的n个点(用结构体表示点),将其保存在集合中 // (1)输出所有点的坐标信息 // (2)计算有序相邻两点距离之和(先排序,再求距离) Random rd = new Random(); Point p; Dictionary<int, int> position = new Dictionary<int, int>(); int n = int.Parse(Console.ReadLine()); int i = 0; for (int j = 0; j < n; j++) { p.x = rd.Next(0, 1000); p.y = rd.Next(0, 1000); int pos = 10000 * p.x + p.y; position.Add(i, pos); i++; } //输出dictionary foreach (KeyValuePair<int, int> item in position) { int x = item.Value / 10000; int y = item.Value % 10000; Console.WriteLine("({0},{1})", x, y); } Console.WriteLine(); //排序 冒dictionary泡 for (int j = 0; j < i; j++) { for (int m = 0; m < i - j - 1; m++) { if (position[m] > position[m + 1]) { int temp = position[m]; position[m] = position[m + 1]; position[m + 1] = temp; } } } foreach (KeyValuePair<int, int> item in position) { int x = item.Value / 10000; int y = item.Value % 10000; Console.WriteLine("({0},{1})", x, y); } Console.WriteLine(); //求距离 = = double sum = 0; for (int j = 0; j < i - 1; j++) { int x1 = position[j] / 10000; int y1 = position[j] % 10000; int x2 = position[j + 1] / 10000; int y2 = position[j + 1] % 10000; int temp = (x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1); sum += System.Math.Sqrt(temp); } Console.WriteLine(sum);