当前位置: 首页 > news >正文

C# Dictionary 的几种遍历方法

 

        Dictionary<stringint> list = new Dictionary<stringint>();

            list.Add("d", 1);

            //3.0以上版本

            foreach (var item in list)

            {

                Console.WriteLine(item.Key + item.Value);

            }

            //KeyValuePair<T,K>

            foreach (KeyValuePair<stringint> kv in list)

            {

                Console.WriteLine(kv.Key + kv.Value);

            }

            //过键的集合取

            foreach (string key in list.Keys)

            {

                Console.WriteLine(key + list[key]);

            }

            //直接取值

            foreach (int val in list.Values)

            {

                Console.WriteLine(val);

            } 

            //非要采用for的方法也可

            List<string> test = new List<string>(list.Keys);

 

            for (int i = 0; i < list.Count; i++)

            {

                Console.WriteLine(test[i] + list[test[i]]);

            }

Dictionary( TKey , TValue )

表示键和值的集合。

Dictionary( TKey, TValue) 泛型类提供了从一组键到一组值的映射。字典中的每个添加项都由一个值及其相关联的键组成。通过键来检索值的速度是非常快的,接近于 O(1),这是因为 Dictionary( TKey, TValue) 类是作为一个哈希表来实现的。(检索速度取决于为 TKey 指定的类型的哈希算法的质量。)

只要对象用作 Dictionary( TKey, TValue) 中的键,它就不能以任何影响其哈希值的方式更改。使用字典的相等比较器比较时,Dictionary( TKey, TValue) 中的任何键都必须是唯一的。键不能为 null 。 但是如果值类型 TValue 为引用类型,该值则可以为空。

Dictionary( TKey, TValue) 需要一个相等实现来确定键是否相等。可以使用一个接受 comparer 参数的构造函数来指定 IEqualityComparer( T) ) 泛型接口的实现;如果不指定实现,则使用默认的泛型相等比较器 EqualityComparer( T) ) . Default 。如果类型 TKey 实现 System. IEquatable< (Of < ( T> ) > ) 泛型接口,则默认相等比较器会使用该实现。

Dictionary( TKey, TValue) 的容量是 Dictionary( TKey, TValue) 可以包含的元素数。当向 Dictionary( TKey, TValue) 中添加元素时,将通过重新分配内部数组来根据需要自动增大容量。

对于枚举而言,字典中的每一项都被视为一个表示值及其键的 KeyValuePair( TKey, TValue) 结构进行处理。项返回的顺序未定义。

C# 语言的 foreach 语句(在 C++ 中为 for each ,在 Visual Basic 中为 For Each )需要集合中每个元素的类型。由于 Dictionary( TKey, TValue) 是键和值的集合,因此元素类型并非键类型或值类型。相反,元素类型是键类型和值类型的 KeyValuePair( TKey, TValue) 。例如:

此类型的公共静态(在 Visual Basic 中为 Shared )成员是线程安全的。但不能保证任何实例成员是线程安全的。

只要不修改该集合,Dictionary( TKey, TValue) 就可以同时支持多个阅读器。即便如此,从头到尾对一个集合进行枚举本质上并不是一个线程安全的过程。当出现枚举与写访问互相争用这种极少发生的情况时,必须在整个枚举过程中锁定集合。若要允许多个线程访问集合以进行读写操作,则必须实现自己的同步。

转载于:https://www.cnblogs.com/dream844/archive/2013/01/22/2871407.html

相关文章:

  • Hadoop的MapReduce执行流程图
  • ARM9学习笔记之——MMU
  • Git-Basic
  • 垃圾邮件年关“疯行” 邮件服务器安全管理巧支招
  • dd
  • js控制图片轮转显示
  • CLAMAV 杀毒软件安装及使用配置
  • 基本语法 跳出for 循环
  • 马哥运维学习作业(一)
  • 成功的原因千千万万,失败的理由就那么几个....
  • Nginx实战基础篇一 源码包编译安装部署web服务器
  • UICircularSlider
  • RIL接听电话没有声音的问题 [ RIL_Answer | RIL_SetAudioDevices ]
  • JWSlideMenu
  • VMM系列之添加Hyper-V群集主机到VMM服务器
  • [nginx文档翻译系列] 控制nginx
  • [Vue CLI 3] 配置解析之 css.extract
  • CSS 专业技巧
  • Docker 笔记(2):Dockerfile
  • ES10 特性的完整指南
  • IDEA 插件开发入门教程
  • Js实现点击查看全文(类似今日头条、知乎日报效果)
  • MySQL Access denied for user 'root'@'localhost' 解决方法
  • Python学习之路13-记分
  • Theano - 导数
  • ViewService——一种保证客户端与服务端同步的方法
  • 安装python包到指定虚拟环境
  • 编写符合Python风格的对象
  • 每天10道Java面试题,跟我走,offer有!
  • 使用SAX解析XML
  • 栈实现走出迷宫(C++)
  • Linux权限管理(week1_day5)--技术流ken
  • 曾刷新两项世界纪录,腾讯优图人脸检测算法 DSFD 正式开源 ...
  • #在 README.md 中生成项目目录结构
  • (175)FPGA门控时钟技术
  • (C#)Windows Shell 外壳编程系列4 - 上下文菜单(iContextMenu)(二)嵌入菜单和执行命令...
  • (poj1.3.2)1791(构造法模拟)
  • (二)Eureka服务搭建,服务注册,服务发现
  • (二十三)Flask之高频面试点
  • *ST京蓝入股力合节能 着力绿色智慧城市服务
  • .NET Core SkiaSharp 替代 System.Drawing.Common 的一些用法
  • .net core webapi 部署iis_一键部署VS插件:让.NET开发者更幸福
  • .NET LINQ 通常分 Syntax Query 和Syntax Method
  • .Net Redis的秒杀Dome和异步执行
  • .NET 使用配置文件
  • .net遍历html中全部的中文,ASP.NET中遍历页面的所有button控件
  • .Net各种迷惑命名解释
  • .net实现客户区延伸至至非客户区
  • ?php echo ?,?php echo Hello world!;?
  • [HDU]2161Primes
  • [IE6 only]关于Flash/Flex,返回数据产生流错误Error #2032的解决方式
  • [Java][算法 双指针]Day 02---LeetCode 热题 100---04~07
  • [java进阶]——方法引用改写Lambda表达式
  • [one_demo_17]使用传统方式实现线程间通信的例子
  • [PAT] 1041 Be Unique (20 分)Java