在 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();
注意事项
- 键的唯一性:
Dictionary的键必须是唯一的,添加重复键会引发ArgumentException。 - 线程安全:
Dictionary本身不是线程安全的。在多线程环境中使用时,可以考虑ConcurrentDictionary。 - 性能:
Dictionary的操作时间复杂度为 O(1),遍历时间复杂度为 O(n)。
总结
通过上述遍历和操作方式,可以高效地对 Dictionary 中的键值对进行处理。在选择遍历方法时,应根据应用场景的性能需求(如并行处理)和操作目标(如仅遍历键或值)来确定最佳实践。
2753

被折叠的 条评论
为什么被折叠?



