介绍C#中Dictionary类型的遍历⽅式及操作

在 C# 中,Dictionary<TKey, TValue> 是一个键值对集合,可以通过多种方式遍历和操作其元素。以下是常见的遍历方式及对应的代码示例:


1. 使用 foreach 遍历键值对

最常见的遍历方式是使用 foreach 遍历字典中的每个键值对。

Dictionary<int, string> myDictionary = new Dictionary<int, string>
{
    { 1, "Apple" },
    { 2, "Banana" },
    { 3, "Cherry" }
};

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

2. 遍历键集合

通过 Keys 属性获取所有键并遍历。

foreach (int key in myDictionary.Keys)
{
    Console.WriteLine($"Key: {key}");
}

3. 遍历值集合

通过 Values 属性获取所有值并遍历。

foreach (string value in myDictionary.Values)
{
    Console.WriteLine($"Value: {value}");
}

4. 使用 for 遍历(通过 LINQ 转换)

如果需要使用索引来访问键值对,可以将字典转为列表后进行遍历。

var keyValuePairs = myDictionary.ToList();

for (int i = 0; i < keyValuePairs.Count; i++)
{
    Console.WriteLine($"Key: {keyValuePairs[i].Key}, Value: {keyValuePairs[i].Value}");
}

5. 使用 LINQ 查询遍历

通过 LINQ 查询对字典进行筛选和遍历。

var filteredDictionary = myDictionary.Where(kvp => kvp.Key > 1);

foreach (var kvp in filteredDictionary)
{
    Console.WriteLine($"Key: {kvp.Key}, Value: {kvp.Value}");
}

6. 使用 Parallel.ForEach 进行并行遍历

对于较大的字典,可以使用 Parallel.ForEach 实现并行遍历。

using System.Threading.Tasks;

Parallel.ForEach(myDictionary, kvp =>
{
    Console.WriteLine($"Key: {kvp.Key}, Value: {kvp.Value}");
});

操作字典元素

添加元素
myDictionary.Add(4, "Date");
修改元素

通过键访问并修改对应值:

if (myDictionary.ContainsKey(2))
{
    myDictionary[2] = "Blueberry";
}
删除元素

使用 Remove 方法删除指定键的元素:

myDictionary.Remove(3);
清空字典

移除所有键值对:

myDictionary.Clear();

注意事项

  1. 键的唯一性Dictionary 的键必须是唯一的,添加重复键会引发 ArgumentException
  2. 线程安全Dictionary 本身不是线程安全的。在多线程环境中使用时,可以考虑 ConcurrentDictionary
  3. 性能Dictionary 的操作时间复杂度为 O(1),遍历时间复杂度为 O(n)。

总结

通过上述遍历和操作方式,可以高效地对 Dictionary 中的键值对进行处理。在选择遍历方法时,应根据应用场景的性能需求(如并行处理)和操作目标(如仅遍历键或值)来确定最佳实践。

C#中,有多种方法可以遍历`Dictionary`的`key`和`value`,以下是详细介绍: ### 遍历键值对 使用`foreach`循环遍历`Dictionary`中的每一个键值对,通过`KeyValuePair<TKey, TValue>`对象来获取键和值。示例代码如下: ```csharp Dictionary<string, int> dictionary = new Dictionary<string, int>(); dictionary.Add("apple", 1); dictionary.Add("banana", 2); dictionary.Add("cherry", 3); foreach (KeyValuePair<string, int> kvp in dictionary) { string key = kvp.Key; int value = kvp.Value; Console.WriteLine($"Key: {key}, Value: {value}"); } ``` ### 遍历所有的键 通过`Keys`属性获取`Dictionary`中所有的键,然后使用`foreach`循环遍历这些键,再通过键来获取对应的值。示例代码如下: ```csharp Dictionary<string, int> dictionary = new Dictionary<string, int>(); dictionary.Add("apple", 1); dictionary.Add("banana", 2); dictionary.Add("cherry", 3); foreach (string key in dictionary.Keys) { int value = dictionary[key]; Console.WriteLine($"Key: {key}, Value: {value}"); } ``` ### 遍历所有的值 通过`Values`属性获取`Dictionary`中所有的值,然后使用`foreach`循环遍历这些值。示例代码如下: ```csharp Dictionary<string, int> dictionary = new Dictionary<string, int>(); dictionary.Add("apple", 1); dictionary.Add("banana", 2); dictionary.Add("cherry", 3); foreach (int value in dictionary.Values) { Console.WriteLine($"Value: {value}"); } ``` ### 使用LINQ查询 使用LINQ查询可以对`Dictionary`进行更复杂的操作,例如筛选出满足特定条件的键值对。示例代码如下: ```csharp Dictionary<string, int> dictionary = new Dictionary<string, int>(); dictionary.Add("apple", 1); dictionary.Add("banana", 2); dictionary.Add("cherry", 3); var filteredPairs = from kvp in dictionary where kvp.Value > 1 select kvp; foreach (KeyValuePair<string, int> kvp in filteredPairs) { string key = kvp.Key; int value = kvp.Value; Console.WriteLine($"Key: {key}, Value: {value}"); } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

面试八股文

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值