C# 集合(Collection)学习笔记

一、集合概述

集合,是C#语言中最常用的一种数据结构,它是一组对象的容器,可以存储和操作多个对象。在C#中,集合包括泛型集合和非泛型集合两种类型。

泛型集合是指使用泛型类型定义的集合类,提供了更好的类型安全性和代码重用性。而非泛型集合则是指没有使用泛型类型定义的集合类,可以存储任何类型的对象。

二、集合分类

C#中的集合主要分为以下几类:

  1. List<T>:可变大小的列表,可以按照索引访问。

  2. Dictionary<TKey, TValue>:键值对集合,提供通过键快速查找值的能力。

  3. Queue<T>:先进先出(FIFO)队列,支持在队列末尾添加元素,在队列头部删除元素。

  4. Stack<T>:后进先出(LIFO)栈,支持在栈顶添加元素,在栈顶删除元素。

  5. HashSet<T>:无序不重复元素集合,可以快速查找集合中是否存在某个元素。

  6. SortedDictionary<TKey, TValue>:键值对集合,按照键进行排序。

  7. SortedSet<T>:有序不重复元素集合,按照元素进行排序。

三、集合实例

1. List<T>

csharpCopy Code
List<string> names = new List<string>(); // 添加元素到列表末尾 names.Add("Tom"); names.Add("Jerry"); names.Add("Mike"); // 遍历列表元素并输出 foreach (string name in names) { Console.WriteLine(name); } // 在指定位置插入元素 names.Insert(2, "Kate"); // 删除指定元素 names.Remove("Tom"); // 判断列表中是否包含指定元素 if (names.Contains("Jerry")) { Console.WriteLine("Jerry exists in the list."); }

2. Dictionary<TKey, TValue>

csharpCopy Code
Dictionary<string, int> scores = new Dictionary<string, int>(); // 添加键值对 scores.Add("Tom", 90); scores.Add("Jerry", 85); scores.Add("Mike", 95); // 访问字典中的值 int score = scores["Tom"]; // 遍历字典中的键值对并输出 foreach (KeyValuePair<string, int> kvp in scores) { Console.WriteLine("Name: {0}, Score: {1}", kvp.Key, kvp.Value); } // 判断字典中是否包含指定键 if (scores.ContainsKey("Jerry")) { Console.WriteLine("Jerry's score is {0}", scores["Jerry"]); }

3. Queue<T>

csharpCopy Code
Queue<int> numbers = new Queue<int>(); // 添加元素到队列末尾 numbers.Enqueue(1); numbers.Enqueue(2); numbers.Enqueue(3); // 访问队列头部元素 int head = numbers.Peek(); // 遍历队列并输出 foreach (int number in numbers) { Console.WriteLine(number); } // 删除队列头部元素 int removed = numbers.Dequeue();

4. Stack<T>

csharpCopy Code
Stack<int> numbers = new Stack<int>(); // 添加元素到栈顶 numbers.Push(1); numbers.Push(2); numbers.Push(3); // 访问栈顶元素 int top = numbers.Peek(); // 遍历栈并输出 foreach (int number in numbers) { Console.WriteLine(number); } // 删除栈顶元素 int popped = numbers.Pop();

5. HashSet<T>

csharpCopy Code
HashSet<string> names = new HashSet<string>(); // 添加元素到集合中 names.Add("Tom"); names.Add("Jerry"); names.Add("Mike"); // 遍历集合并输出 foreach (string name in names) { Console.WriteLine(name); } // 判断集合中是否包含指定元素 if (names.Contains("Jerry")) { Console.WriteLine("Jerry exists in the set."); }

6. SortedDictionary<TKey, TValue>

csharpCopy Code
SortedDictionary<string, int> scores = new SortedDictionary<string, int>(); // 添加键值对到字典中 scores.Add("Tom", 90); scores.Add("Jerry", 85); scores.Add("Mike", 95); // 访问字典中的值 int score = scores["Tom"]; // 遍历字典并输出 foreach (KeyValuePair<string, int> kvp in scores) { Console.WriteLine("Name: {0}, Score: {1}", kvp.Key, kvp.Value); } // 判断字典中是否包含指定键 if (scores.ContainsKey("Jerry")) { Console.WriteLine("Jerry's score is {0}", scores["Jerry"]); }

7. SortedSet<T>

csharpCopy Code
SortedSet<int> numbers = new SortedSet<int>(); // 添加元素到集合中 numbers.Add(3); numbers.Add(1); numbers.Add(2); // 遍历集合并输出 foreach (int number in numbers) { Console.WriteLine(number); } // 判断集合中是否包含指定元素 if (numbers.Contains(2)) { Console.WriteLine("2 exists in the set."); }

四、总结

C#集合是一种重要的数据结构,在实际开发中经常被使用。掌握各种类型的集合的特点和用法,能够更加高效地处理数据,提高开发效率。