C#集合和字典

C# 集合和字典

集合(Collections)

集合是C#中常用的一种数据结构,它可以容纳一组具有相同类型的对象。C#中常用的集合类有:

List

List是C#中最常用的集合类之一。它可以容纳任何类型的对象,且可以动态地增加或删除元素。下面是List的一些常用方法:

List<int> numbers = new List<int>();

// 添加元素
numbers.Add(1);
numbers.Add(2);
numbers.Add(3);

// 访问元素
int first = numbers[0];

// 删除元素
numbers.Remove(2);

// 遍历集合
foreach (int number in numbers)
{
    Console.WriteLine(number);
}

Dictionary<TKey, TValue>

Dictionary<TKey, TValue>是C#中用于存储键值对的集合类。其中,TKey表示键的类型,TValue表示值的类型。下面是Dictionary<TKey, TValue>的一些常用方法:

Dictionary<string, int> ages = new Dictionary<string, int>();

// 添加键值对
ages.Add("Tom", 20);
ages.Add("Jerry", 18);
ages.Add("Mickey", 22);

// 访问值
int tomAge = ages["Tom"];

// 删除键值对
ages.Remove("Jerry");

// 遍历集合
foreach (KeyValuePair<string, int> pair in ages)
{
    Console.WriteLine(pair.Key + ": " + pair.Value);
}

字典(Dictionary)

字典是C#中的一种高效的键值对数据结构,它可以快速地查找特定的键,并返回与该键相关联的值。C#中的字典类就是Dictionary<TKey, TValue>。下面是一些关于字典的笔记:

字典的基本操作

Dictionary<string, int> ages = new Dictionary<string, int>();

// 添加键值对
ages.Add("Tom", 20);
ages.Add("Jerry", 18);
ages.Add("Mickey", 22);

// 访问值
int tomAge = ages["Tom"];

// 删除键值对
ages.Remove("Jerry");

// 遍历集合
foreach (KeyValuePair<string, int> pair in ages)
{
    Console.WriteLine(pair.Key + ": " + pair.Value);
}

字典的遍历

遍历字典有两种方式,一种是遍历所有的键值对,另一种是遍历所有的键或所有的值

Dictionary<string, int> ages = new Dictionary<string, int>();

// 添加键值对
ages.Add("Tom", 20);
ages.Add("Jerry", 18);
ages.Add("Mickey", 22);

// 遍历键值对
foreach (KeyValuePair<string, int> pair in ages)
{
    Console.WriteLine(pair.Key + ": " + pair.Value);
}

// 遍历键
foreach (string key in ages.Keys)
{
    Console.WriteLine(key);
}

// 遍历值
foreach (int value in ages.Values)
{
    Console.WriteLine(value);
}

字典的性能

字典是一种高效的数据结构,它的查找操作的时间复杂度是O(1),因为它是通过哈希表来实现的。在实际应用中,如果需要频繁地进行查找操作,字典是一种非常适合的数据结构。但是,字典的缺点是占用内存较多,因为它需要维护哈希表。

字典的键和值的类型

字典的键和值可以是任何类型的对象,但是需要注意的是,键必须是唯一的。如果键重复了,会导致后面的键值对覆盖前面的键值对。在使用字典时,需要根据具体的场景选择合适的键和值的类型。

字典的线程安全性

字典在默认情况下是非线程安全的,如果多个线程同时对同一个字典进行修改操作,可能会导致数据的不一致性。为了解决这个问题,C#提供了线程安全的字典类ConcurrentDictionary<TKey, TValue>,它可以安全地被多个线程同时访问和修改。

posted @ 2023-03-10 01:59  Wo_OD  阅读(147)  评论(0编辑  收藏  举报