【C#基础知识 15】6. 集合 -- 6.2 Dictionary

6.2 Dictionary 详细讲解

Dictionary<TKey, TValue> 是 C# 中非常常用的一种集合类型,它允许您存储键值对(key-value pairs),并且可以通过键快速查找对应的值。下面是对 Dictionary 的详细讲解,包括其优点、缺点以及代码示例。

优点
  1. 快速查找Dictionary 使用哈希表实现,因此查找、插入和删除操作的平均时间复杂度为 O(1)。
  2. 键值对存储:可以方便地存储和检索键值对,适用于需要快速查找的场景。
  3. 灵活性:键和值可以是任何数据类型,包括自定义类型。
  4. 动态大小Dictionary 的大小可以根据需要动态调整,无需预先指定容量。
缺点
  1. 无序性Dictionary 中的元素没有固定的顺序,遍历元素时顺序可能与插入顺序不同。
  2. 内存消耗:由于使用哈希表实现,Dictionary 可能会消耗较多的内存。
  3. 线程不安全Dictionary 不是线程安全的,如果在多线程环境中使用,需要额外的同步机制。
  4. 哈希冲突:虽然哈希表设计得当可以减少哈希冲突,但在某些情况下仍可能出现冲突,影响性能。
代码示例

以下是一些使用 Dictionary 的示例代码,展示了如何声明、初始化、添加、查找和删除元素。

1. 声明和初始化

csharp

using System;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        // 声明一个 Dictionary,键为 string 类型,值为 int 类型
        Dictionary<string, int> ageDictionary = new Dictionary<string, int>();

        // 初始化时添加键值对
        Dictionary<string, string> cityDictionary = new Dictionary<string, string>
        {
            { "Alice", "New York" },
            { "Bob", "Los Angeles" },
            { "Charlie", "Chicago" }
        };
    }
}
2. 添加元素

csharp

using System;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        Dictionary<string, int> ageDictionary = new Dictionary<string, int>();

        // 添加键值对
        ageDictionary.Add("Alice", 30);
        ageDictionary.Add("Bob", 25);
        ageDictionary.Add("Charlie", 35);

        // 输出所有键值对
        foreach (var kvp in ageDictionary)
        {
            Console.WriteLine($"Name: {kvp.Key}, Age: {kvp.Value}");
        }
    }
}
3. 查找元素

csharp

using System;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        Dictionary<string, int> ageDictionary = new Dictionary<string, int>
        {
            { "Alice", 30 },
            { "Bob", 25 },
            { "Charlie", 35 }
        };

        // 使用 TryGetValue 方法查找元素
        if (ageDictionary.TryGetValue("Alice", out int age))
        {
            Console.WriteLine($"Alice's age is {age}.");
        }
        else
        {
            Console.WriteLine("Alice not found.");
        }

        // 使用索引器查找元素
        if (ageDictionary.ContainsKey("Bob"))
        {
            Console.WriteLine($"Bob's age is {ageDictionary["Bob"]}.");
        }
        else
        {
            Console.WriteLine("Bob not found.");
        }
    }
}
4. 删除元素

csharp

using System;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        Dictionary<string, int> ageDictionary = new Dictionary<string, int>
        {
            { "Alice", 30 },
            { "Bob", 25 },
            { "Charlie", 35 }
        };

        // 删除键为 "Bob" 的元素
        if (ageDictionary.Remove("Bob"))
        {
            Console.WriteLine("Bob removed.");
        }
        else
        {
            Console.WriteLine("Bob not found.");
        }

        // 输出剩余的键值对
        foreach (var kvp in ageDictionary)
        {
            Console.WriteLine($"Name: {kvp.Key}, Age: {kvp.Value}");
        }
    }
}

通过这些示例,您可以更好地理解和使用 Dictionary 集合类型。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

路飞VS草帽

感谢支持~

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

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

打赏作者

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

抵扣说明:

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

余额充值