C# Dictionary 的几种遍历方法

摘要:
列表中的kv){Console.WriteLine(kv.Key+kv.Value);

 

        Dictionary<string, int> list = new Dictionary<string, int>();

            list.Add("d", 1);

            //3.0以上版本

            foreach (var item in list)

            {

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

            }

            //KeyValuePair<T,K>

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

免责声明:文章转载自《C# Dictionary 的几种遍历方法》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Gradle 自定义插件tomcat无法启动原因分析下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

ubuntu下minicom的使用方法(类似win的超级终端)

  转自: https://blog.csdn.net/qq_38880380/article/details/77662637   因为现在电脑基本不配备串行接口,所以,usb转串口成为硬件调试时的必然选择。 目前知道的,PL2303的驱动是有的,在dev下的名称是ttyUSB#。 minicom,tkterm都是linux下应用比较广泛的串口软件,...

win8中如何禁用屏幕旋转的快捷键

程序员通常会使用ctrl+alt+方向键 里编辑代码,特别对于使用eclipse的程序员,更是如此,但是win8却把这一快捷键给占用了,很不爽,如何办,很简单.直接上图: 2.但是发现禁用之后并没有解决问题,该系列快捷键还是不能被VS或eclipses使用,因此必须更改这些快捷键,才可以达到目的.在桌面空白处右击,选择:->图形属性->选项和...

Mac版sublime text右键open in browser 不能识别中文名解决办法

问题描述: Mac下sublime text下打开中文命名的html文件,右键open in browser,浏览器无反应。 解决思路: 要么适应软件,要么改进软件来适应。 1.  将中文名的html文件,改成英文名的html文件来预览。 2.  改造sublime text, 安装插件SideBarEnhancements,使用插件的“open in...

android之DPAD上下左右四个键控制

我们代码的目的很简单,那就是监听上下左右中这几个键的事件触发。直接上代码: dpad.xml [xhtml] view plaincopy  <?xml version="1.0" encoding="utf-8"?>   <AbsoluteLayout     xmlns:android="http://schemas.andr...

xshell快捷键

ctrl + tab 切换选项卡 删除ctrl + d      删除光标所在位置上的字符相当于VIM里x或者dlctrl + h      删除光标所在位置前的字符相当于VIM里hx或者dhctrl + k      删除光标后面所有字符相当于VIM里d shift+$ctrl + u      删除光标前面所有字符相当于VIM里d shift+^ct...

Dictionary.TryGetValue 方法 试用记 Mark

 1 if (name == null || name == "") 2                return null; 3            XLine obj; 4            if (xlines.TryGetValue(name, out obj)) 5            { 6                retur...