• 在 C# 中对比KeyValuePair<TKey, TValue> 和 IDictionary<TKey, TValue>


    C# 中的 KeyValuePair 和 IDictionary 具有独特的用途并表现出不同的特征。

    KeyValuePair 的功能

    KeyValuePair 是存储单个键值对的数据结构。它属于 System.Collections.Generic 命名空间。

    用法

    • 它用于表示单个键值对,通常在枚举的上下文中或当需要从方法返回多个值时。

    • 经常与实现键值对的集合一起使用,例如字典,但也可以单独使用。

    不变性

    创建后,KeyValuePair 的键和值无法修改,因为其属性是只读的(DotNetPerls)。

    特性

    • Key:获取键值对中的键。
    • Value:获取键值对中的值。

    注意: KeyValuePair 可能包含重复的键。

    例子

    // 导入 System.Windows 命名空间以使用 WPF 功能。
    using System.Windows; 
    
    // 导入 System.Collections.Generic 命名空间以使用泛型集合。
    using System.Collections.Generic; 
    
    // 导入 System 命名空间以使用基本功能,如 Console。
    using System; 
    
    // 定义应用程序的命名空间。
    namespace KeyValuePairDictionaryExample 
    {
        // MainWindow.xaml 的交互逻辑
        /// 
        /// MainWindow.xaml 的交互逻辑
        /// 
        // MainWindow 类继承自 Window,Window 是 WPF 窗口的基类。
        public partial class MainWindow : Window 
        {
            // MainWindow 的构造函数。
            public MainWindow() 
            {
                // 初始化组件(由 WPF 设计器生成)。
                InitializeComponent(); 
                // 调用方法生成并显示键值对列表。
                GenerateKeyValuePairList(); 
            }
    
            // 方法生成一个键值对列表。
            private void GenerateKeyValuePairList() 
            {
                // 创建一个存储 KeyValuePair 对象的列表。
                List> keyValuePairsList = new List>();
    
                // 添加初始的键值对到列表中。
                keyValuePairsList.Add(new KeyValuePair("firstKey", "First Value")); 
                // 添加第一个键值对。
                keyValuePairsList.Add(new KeyValuePair("secondKey", "Second Value")); 
                // 添加第二个键值对。
                keyValuePairsList.Add(new KeyValuePair("thirdKey", "Third Value")); 
                // 添加第三个键值对。
                keyValuePairsList.Add(new KeyValuePair("thirdKey", "Fourth Value")); 
                // 添加第四个键值对,键与前一个相同。
                keyValuePairsList.Add(new KeyValuePair("thirdKey", "Fifth Value")); 
                // 添加第五个键值对,键与前一个相同。
                keyValuePairsList.Add(new KeyValuePair("thirdKey", "Sixth Value")); 
                // 添加第六个键值对,键与前一个相同。
    
                // 创建一个列表存储要添加的新键值对。
                List> itemsToAddToExistingList = new List>
                {
                    new KeyValuePair("fourthKey", "Seventh Value"), 
                    // 创建并添加第七个键值对。
                    new KeyValuePair("fifthKey", "Eighth Value") 
                    // 创建并添加第八个键值对。
                };
    
                // 将新键值对添加到原始列表中。
                foreach (var kvp in itemsToAddToExistingList) 
                // 遍历每个新键值对。
                {
                    keyValuePairsList.Add(kvp); 
                    // 将当前键值对添加到原始列表中。
                }
    
                // 调用方法显示所有键值对。
                ShowKeyValuePairs(keyValuePairsList);
            }
    
            // 方法显示键值对。
            private void ShowKeyValuePairs(List> keyValuePairsList) 
            {
                // 遍历列表中的每个键值对。
                foreach (KeyValuePair kvp in keyValuePairsList) 
                {
                    // 输出键值对到控制台。
                    Console.WriteLine($"Key: {kvp.Key}, Value: {kvp.Value}"); 
                }
            }
        }
    }
    

    Dictionary 的功能

    Dictionary 类负责管理一组键值对。它是 System.Collections.Generic 命名空间的一个组件。

    用途

    此类的主要用途是存储多个键值对,确保每个键都是唯一的。它提供了检索、添加和删除这些对的高效操作。

    可变性

    就可变性而言,您可以在字典中添加、删除和更新元素。

    用法

    当您需要管理数据集合时通常使用此类,其中每个元素由唯一的键标识。

    例子

    using System;
    // 导入 System 命名空间以使用基本功能,如 Console。
    
    using System.Windows;
    // 导入 System.Windows 命名空间以使用 WPF 功能。
    
    using System.Collections.Generic;
    // 导入 System.Collections.Generic 命名空间以使用泛型集合。
    
    namespace KeyValuePairDisctionaryExample
    // 定义应用程序的命名空间。
    {
        /// 
        /// MainWindow.xaml 的交互逻辑
        /// 
        public partial class MainWindow : Window
        // MainWindow 类继承自 Window,Window 是 WPF 窗口的基类。
        {
            public MainWindow()
            // MainWindow 的构造函数。
            {
                InitializeComponent();
                // 初始化组件(由 WPF 设计器生成)。
                GenerateDictionary();
                // 调用方法生成并显示字典。
            }
    
            private void GenerateDictionary()
            // 方法生成一个字典。
            {
                Dictionary dictCollection = new Dictionary
                // 创建一个存储键值对的字典。
                {
                    {"firstKey", "First Value"},
                    // 添加第一个键值对。
                    {"secondKey", "Second value"},
                    // 添加第二个键值对。
                    {"ThirdKey", "Third Value"},
                    // 添加第三个键值对。
                    {"FourthKey", "Fourth Value"}
                    // 添加第四个键值对。
                };
    
                dictCollection.Add("FifthKey", "FifthValue");
                // 添加第五个键值对。
    
                if (dictCollection.ContainsKey("secondKey"))
                // 检查字典是否包含键 "secondKey"。
                {
                    Console.WriteLine(dictCollection["secondKey"]);
                    // 输出键 "secondKey" 对应的值:Second value。
                }
    
                foreach (var kvp in dictCollection)
                // 遍历字典中的每个键值对。
                {
                    Console.WriteLine($"Key: {kvp.Key}, Value: {kvp.Value}");
                    // 输出键值对到控制台。
                }
            }
        }
    }
    

    注意:在字典中,不允许有重复的键。

  • 相关阅读:
    机器学习(13)---降维实例
    openvswitch group hash实现代码分析
    力扣Lc29---- 541. 反转字符串 II(java版)-2024年4月06日
    干系人管理相关问题
    C++语言·list链表(下)
    vue前端开发ios系统:https发http请求 网络通讯之间的安全问题
    关于线程池设置大小的考虑
    【考研高数 武忠祥+880版 自用】高数第三章基础阶段思维导图
    spring中的注解事务的演示及添加步骤
    Vue导航守卫beforeRouteEnter,beforeRouteUpdate,beforeRouteLeave
  • 原文地址:https://blog.csdn.net/xiefeng240601/article/details/139814263