c# Dictionary 字典与线程安全字典的基本使用

这篇具有很好参考价值的文章主要介绍了c# Dictionary 字典与线程安全字典的基本使用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

在C#中,字典(Dictionary)是一种特殊的集合,用于存储键/值对。这是一种关联数组,其中每个元素都包含一个键(Key)和一个值(Value)。

下面是一个简单的C#字典的例子:

//字典:泛型;key - value,增删查改 都很快;
                // 字典如果数据量太大的话,也会影响效率.
                //  字典不是线程安全 ConcurrentDictionary
                Console.WriteLine("***************Dictionary******************");
                Dictionary<int, string> dic = new Dictionary<int, string>();
                dic.Add(1, "HaHa");
                dic.Add(5, "HoHo");
                dic.Add(3, "HeHe");
                dic.Add(2, "HiHi");
                dic.Add(4, "HuHu1");
                dic[4] = "HuHu"; // 保存数据,key有就覆盖 没有就新增
                dic.Add(4, "HuHu"); // 如果存在会异常
                var value= dic[4]; //获取数据 没有会异常的
                var result = dic.ContainsKey(4); // 检查是否存在
                foreach (var item in dic)
                {
                    Console.WriteLine($"Key:{item.Key}, Value:{item.Value}");
                }
                //for (int i = 0; i < dic.Count; i++)
                //{
                //    var value1 = dic[4];
                //    Console.WriteLine($"Key:{value1}, Value:{dic[i]}");
                //}
                // 取值
                // 定义
                Dictionary<string, string> dictExecutes = new Dictionary<string, string>();

                // 添加元素
                dictExecutes.Add("bmp", "paint.exe");
                dictExecutes.Add("dib", "paint.exe");
                dictExecutes.Add("rtf", "wordpad.exe");
                dictExecutes.Add("txt", "notepad.exe");

                // 取值
                Console.WriteLine("For key = 'rtf', value = {0}.", dictExecutes["rtf"]);

                // 改值
                dictExecutes["rtf"] = "winword.exe";
                Console.WriteLine("For key = 'rtf', value = {0}.", dictExecutes["rtf"]);

                // 遍历 KEY
                foreach (string key in dictExecutes.Keys) Console.WriteLine("Key = {0}", key);

                // 遍历 VALUE
                foreach (string item in dictExecutes.Values) Console.WriteLine("value = {0}", value);

                // 遍历字典
                foreach (KeyValuePair<string, string> kvp in dictExecutes) 
                {
                    Console.WriteLine("Key = {0}, Value = {1}", kvp.Key, kvp.Value);
                    if (kvp.Value == "paint.exe")
                        dictExecutes[kvp.Key] = "zhy.exe";
                }
                    

                // 添加存在的元素
                try
                {
                    dictExecutes.Add("txt", "winword.exe");
                }
                catch (ArgumentException)
                {
                    Console.WriteLine("An element with Key = 'txt' already exists.");
                }

                // 删除元素
                dictExecutes.Remove("doc"); // 没有不会异常
                if (!dictExecutes.ContainsKey("doc")) Console.WriteLine("Key 'doc' is not found.");

                // 判断键存在
                if (dictExecutes.ContainsKey("bmp")) Console.WriteLine("An element with Key = 'bmp' exists.");

  

ConcurrentDictionary是.NET框架中的一个类,它提供了一种线程安全的方式来存储键值对。这意味着多个线程可以同时访问和修改ConcurrentDictionary,而不会导致数据竞争或其他并发问题。

以下是一些基本的使用例子:

 // 创建一个新的 ConcurrentDictionary 实例
            var dictionary = new ConcurrentDictionary<string, int>();

            // 向字典中添加一些元素
            dictionary.TryAdd("One", 1);
            dictionary.TryAdd("Two", 2);
            dictionary.TryAdd("Three", 3);

            // 尝试获取一个元素
            if (dictionary.ContainsKey("Two"))
            {
                Console.WriteLine($"Value for 'Two': {dictionary["Two"]}");
            }
            else
            {
                Console.WriteLine("Key 'Two' not found.");
            }

            // 尝试修改一个元素
            dictionary["Two"] = 22;

            // 遍历字典中的所有元素
            foreach (var pair in dictionary)
            {
                Console.WriteLine($"Key: {pair.Key}, Value: {pair.Value}");
            }

            // 删除一个元素
            int value;
            var sucdess = dictionary.TryRemove("Two", out value);
            if (sucdess)
            {
                Console.WriteLine($"Removed key: {value}");
            }
            else
            {
                Console.WriteLine("Key not found.");
            }

  ConcurrentDictionary提供了比普通的Dictionary更安全的并发操作。普通的Dictionary在多线程环境下可能会遇到数据竞争和其他并发问题,因为它的内部实现并不是线程安全的。然而,ConcurrentDictionary`的设计使得在多线程环境下的操作是线程安全的,它使用了高效的并发控制机制来保护其内部数据结构。文章来源地址https://www.toymoban.com/news/detail-736439.html

到了这里,关于c# Dictionary 字典与线程安全字典的基本使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C#“字典”Dictionary的用法

    C#中的Dictionary是一种特殊的数据集合。因为它由键值,和数值组成,并且一一对应,通过键值我们就可以查询到对应的数值,就好像查字典一样,故而我们会形象地称呼它为“字典”。据于它们这种特殊地结构,C#定义了它很多地属性与方法,在实际应用中非常实用。 一、结

    2024年02月13日
    浏览(39)
  • Python零基础超详细教程:字典(Dictionary)相关介绍使用

    前言 嗨喽~大家好呀,这里是魔王呐 ❤ ~! Python字典是另一种可变容器模型, 且可存储任意类型对象,如字符串、数字、元组等其他容器模型。 python更多源码/资料/解答/教程等 点击此处跳转文末名片免费获取 一、创建字典 字典由键和对应值成对组成。字典也被称作关联数组

    2024年02月10日
    浏览(42)
  • 无涯教程-Python - Dictionary(字典)

    每个键都由一个冒号(:)与其值分隔,各元素之间以逗号分隔,并且整个内容都用花括号括起来。一个没有任何元素的空字典用两个大括号书写,如:{}。 键在字典中是唯一的,而值可能不是。字典的值可以是任何类型,但是键必须是不可变的数据类型,如字符串,数字或元组。

    2024年02月11日
    浏览(36)
  • Python列表(list)、元组(tuple)和字典(dictionary)的区别

    目录 列表(list)  访问列表元素  更新和删除列表元素 元组(tuple) 元组的访问、更新、删除操作  字典(dictionary)  创建空字典 修改、删除字典 总结 列表(list)、元组(tuple)和字典(dictionary)都是序列,序列都是由索引和元素组成。遍历和访问都按照如下格式: 具

    2023年04月13日
    浏览(47)
  • Redis从入门到精通【高阶篇】之底层数据结构字典(Dictionary)详解

    上个篇章回顾,我们上个章节,讲了Redis中的快表(QuickList),它是一种特殊的数据结构,用于存储一系列的连续节点,每个节点可以是一个整数或一个字节数组。快表是Redis中的底层数据结构之一,常用于存储有序集合(Sorted Set)等数据类型的底层实现。 那么本章讲解Red

    2024年02月09日
    浏览(50)
  • C# Dictionary中GetEnumerator()方法

    Dictionarystring, string 中的 GetEnumerator() 方法是用于遍历字典中的键值对。它会返回一个 IEnumeratorstring 对象,该对象可以用于按照键的顺序迭代字典中的所有键值对。 具体来说, GetEnumerator() 方法会返回一个 IEnumeratorstring 对象,该对象包含了三个属性: Current :当前迭代到的键

    2024年02月12日
    浏览(37)
  • C#监听Dictionary、List的写入操作

    在开发中,对于内置值类型和string我们可以通过封装属性在 Set 中监听写入操作,但是对于 Dictionary 、 List 等就不能监听到 Add 、 Remove 等写入操作。 所以一般采取两种方式监听它们的读写操作,一种是封装操作方法,间接进行监听,第二种就是重写 Add 和 Remove 等方法。下面

    2024年01月17日
    浏览(40)
  • C#中的HashTable和Dictionary之间的区别

    HashTable和Dictionary都是用于存储数据的数据结构的类型。这两个数据结构都将存储的数据保存为键值对。

    2024年02月17日
    浏览(51)
  • Flask从入门到放弃五(SQLAlchemy介绍与快速使用、创建表插入数据、Scoped_session线程安全、基本增删查改、表模型、Flask-SQLAlchemy、Migrate的使用)

    SQLAlchemy是一个基于Python实现的ORM框架。该框架建立在 DB API之上,使用关系对象映射进行数据库操作,简言之便是:将类和对象转换成SQL,然后使用数据API执行SQL并获取执行结果。 SQLAlchemy的组成部分有: Engine 框架的引擎 Connection Pooling 数据库连接池 Dialect 选择连接数据库的

    2024年02月04日
    浏览(53)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包