一、概述

表示Key/Value集合,可以添加删除元素,允许按Key来访问元素。是Hashtable的泛型等效类。

它需要一个相等实现来确定键是否相等,可以使用实现了IEqualityComparer<T>的构造函数;如果不指定,默认使用IEqualityComparer<T>.Default。如果Tkey的类型实现了IEuatable<T>,默认相等比较器则会使用该实现。

二、声明及初始化

1、可带初始容量 Dictionary<Tkey,TValue> dic=new Dictionary<Tkey,TValue>([Capacity])

Dictionary<string,string> dic=new Dictionary<string,string>();

2、带泛型接口:Dictionary<Tkey,TValue> dic=new Dictionary<Tkey,TValue>(IEqualityComparer<TKey> comparer)

Dictionary<string, string> dic = new Dictionary<string, string>(StringComparer.CurrentCultureIgnoreCase);

三、常用方法

1、操作元素

添加\移除\清空键值对:

dic.Add("a", "a1");
dic.Add("b", "b1");
dic.Remove("a");
dic.Clear();

2、判断包含

是否包含指定键\指定值:

bool hasKey = dic.ContainsKey("a");
bool hasValue = dic.ContainsValue("a1");

3、赋值或访问

获取指定键的值,如果不存在该键,会产生KeyNotFoundException异常。

string avalue = dic["a"];
string value = "";
if (dic.TryGetValue("a", out value)
{
Console.Write(value);
}

赋值或添加新元素。

dic["a"] = "a2";

4、遍历

1、遍历整个字典\遍历Keys/Values:

foreach (KeyValuePair<string, string> kvp in dic)
{
Console.Write(kvp.Key);
Console.Write(kvp.Value);
}
foreach (string key in dic.Keys)
{
Console.Write(key);
}
foreach (string val in dic.Values)
{
Console.Write(val);
}

七、KeyValuePair键值对

KeyValuePair是单个的键值对对象。KeyValuePair可用于接收combox选定的值。

KeyValuePair<string, object> par = (KeyValuePair<string, object>)shoplistcomboBox.SelectedItem;

八、SortedList<Tkey,TValue>

可根据Key对集合中的元素进行自动排序。

SortedDictionary<int, string> sDictionary = new SortedDictionary<int, string>();
sDictionary.Add(, "cc");
sDictionary.Add(, "dd");
sDictionary.Add(, "aa");
sDictionary.Add(, "bb"); // 此处可以发现sDictionary已经自动按key进行了排序 foreach (KeyValuePair<int, string> item in sDictionary)
{
Console.WriteLine(item.Key + ":" + item.Value);
}

SortedDictionary和SortedList区别:

这两个类的区别在于内存的使用以及插入和移除元素的速度:

  • SortedList 使用的内存比 SortedDictionary 少。
  • SortedDictionary 对执行更快的插入和移除操作.
  • 如果使用排序数据一次性填充列表,则 SortedList 比 SortedDictionary 快。

九、Lookup类

Dictionary<Tkey,TValue>只为每个键支持一个值,新类Lookup<Tkey,TValue>是.NET3.5中新增的,它类似与Dictionary<Tkey,TElement>,但把键映射带一个值集上.这个类在程序及System.Core中实现,用System,Linq命名空间定义。

属性、方法

  • Count:属性Count返回集合中的元素个数
  • Item:使用索引器可以根据键访问特定的元素.因为同一个键可以对应多个值,所以这个属性返回所有值的枚举
  • Contain():方法Contains()根据使用用Key参数传送元素,返回一个布尔值
  • ApplyResultSelector():根据传送给它的转换函数,转换每一项,返回一个集合

Loopup<TKey,TElement>不能像一般的字典那样创建,而必须调用方法ToLookup(),它返回一个Lookup<TKey,TElement>对象。方法ToLookup()是一个扩展方法,可以用于实现了IEnumerable<T>的所有类。

当一个Key要求对应多个value情况ToLookup方法非常有用,ToLookup返回一种特殊的数据结构,类似SQL中的group,可以把集合分组并且可以用索引访问这些元素。

class Package
{
public string Company;
public double Weight;
public long TrackingNumber;
} void Main()
{
List<Package> packages = new List<Package> { new Package { Company = "Coho Vineyard", Weight = 25.2, TrackingNumber = 89453312L },
new Package { Company = "Lucerne Publishing", Weight = 18.7, TrackingNumber = 89112755L },
new Package { Company = "Wingtip Toys", Weight = 6.0, TrackingNumber = 299456122L },
new Package { Company = "Contoso Pharmaceuticals", Weight = 9.3, TrackingNumber = 670053128L },
new Package { Company = "Wide World Importers", Weight = 33.8, TrackingNumber = 4665518773L } }; //KeySelector,elementSelector
Lookup<char, string> lookup = (Lookup<char, string>)packages.ToLookup(p => Convert.ToChar(p.Company.Substring(, )), //Key允许有重复值
p => p.Company + " " + p.TrackingNumber); foreach (IGrouping<char, string> packageGroup in lookup)
{
Console.WriteLine(packageGroup.Key);
foreach (string str in packageGroup)
Console.WriteLine(" {0}", str);
}
//KeySelector
Lookup<char, Package> lookup2 = (Lookup<char, Package>)packages.ToLookup(p => Convert.ToChar(p.Company.Substring(, ))); foreach (IGrouping<char, Package> packageGroup in lookup2)
{
Console.WriteLine(packageGroup.Key);
foreach (Package p in packageGroup)
Console.WriteLine(" {0}", p.Company + " " + p.TrackingNumber);
} // 在Lookup根据索引查找元素
IEnumerable<string> cgroup = lookup['C'];
foreach (string str in cgroup)
Console.WriteLine(str);
}

十、线程安全

ConcurrentDictionary

Dictionary<Tkey.TValue>与SortedList的更多相关文章

  1. 泛型与非泛型集合类的区别及使用例程,包括ArrayList,Hashtable,List<T>,Dictionary<Tkey,Tvalue>,SortedList<Tkey,Tvalue>,Queue<T>,Stack<T>等

    泛型与非泛型集合类在C#程序中是非常重要的一个基础概念,这里列一个表来进行对比: 非泛型集合类 泛型集合类 描述 ArrayList List<T> 表示具有动态大小的对象数组 Hasht ...

  2. .net框架-字典对象 Hashtable & Dictionary<TKey,TValue> & SortedList

    字典对象: 字典对象是表示键值对的集合 字典对象有Hashtable(.net 1.0)及其泛型版本Dictionary<TKey,TValue> 字典对象还包括SortedList及其泛 ...

  3. .net源码分析 – Dictionary<TKey, TValue>

    接上篇:.net源码分析 – List<T> Dictionary<TKey, TValue>源码地址:https://github.com/dotnet/corefx/blo ...

  4. .NET中Dictionary<TKey, TValue>浅析

    .NET中Dictionary<TKey, Tvalue>是非常常用的key-value的数据结构,也就是其实就是传说中的哈希表..NET中还有一个叫做Hashtable的类型,两个类型都 ...

  5. Dictionary<TKey, TValue> 类

    C# Dictionary<TKey, TValue> 类 Dictionary<TKey, TValue> 泛型类提供了从一组键到一组值的映射.字典中的每个添加项都由一个值及 ...

  6. C# 字典 Dictionary<Tkey,Tvalue>

    最近悟出来一个道理,在这儿分享给大家:学历代表你的过去,能力代表你的现在,学习代表你的将来.我们都知道计算机技术发展日新月异,速度惊人的快,你我稍不留神,就会被慢慢淘汰!因此:每日不间断的学习是避免被 ...

  7. 巧用Dictionary<TKey,TValue>,完成客户需求

    前几天与客户沟通一个项目,客户对其中某个模块提了一个需求. 把从数据库中取出的对物品的统计重新拆分重新统计.鉴于用文字不能清除的表达需求,我将该需求画出来,便于理解. 需求如下图: 就是A,B,C D ...

  8. C# .Net 中字典Dictionary<TKey,TValue>泛型类 学习浅谈

    一.综述: Dictionary<TKey,TValue>是在 .NET Framework 2.0 版中是新增的.表示键值对的集合,Dictionary<TKey,TValue&g ...

  9. 自定义一个可以被序列化的泛型Dictionary<TKey,TValue>集合

    Dictionary是一个键值类型的集合.它有点像数组,但Dictionary的键可以是任何类型,内部使用Hash Table存储键和值.本篇自定义一个类型安全的泛型Dictionary<TKe ...

随机推荐

  1. 记一次接口调用耗时服务端PHP-FPM配置调优

    最近测试人员不时有反馈,APP首页打开会出现除了基本的页面布局,需要展示数据的地方都是空白. 想着最近首页接口有过调整,新增数据.会不会是接口改动导致的?? 但APP首页接口都是读取redis的,应该 ...

  2. UICollectionView二级树展开

    公司项目是社区类的,上周就下载了些社区类APP看了下,发现小区无忧首页的顶部蛮好玩,就试着做了一下,现在先把UICollectionView的二级树展开功能分享一下 . 1.效果图 2.创建子Coll ...

  3. Java基础教程(6)--数组

    1.基本概念   数组中的每一项称为元素,每个元素都通过数字索引(也可以称为下标)访问,编号从0开始.例如,第4个元素的索引为3.下面的程序创建了一个int类型的数组,把一些值放入数组中并将每个值打印 ...

  4. SecureCRT远程连接Linux下的sqlplus中退格键不能使用之解决方法

    ^H不是H键的意思,是backspace 主要是当你的终端backspace有问题的时候才需要设置   在linux环境下使用sqlplus,在回删(backspace)时往往会出现 一串的乱码.出现 ...

  5. ZOJ Problem Set - 2818

    http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=1818 一开始想着用循环做,看了别人的解法才发现根本没必要,比较根号n就行了 # ...

  6. spss C# 二次开发 学习笔记(二)——Spss以及统计术语解释(IT人眼中的统计术语)

    针对客户需求,需要对一些数据做统计分析.统计分析的第一步,即为数据查询,查找出要统计分析的数据. 查询得出的是一个行列表格的结果集,行.列.表格等这些IT的数据库概念和Spss以及统计中的术语是如何对 ...

  7. python学习之老男孩python全栈第九期_day028知识点总结——面向对象进阶、hashlib

    一. 面向对象进阶与实例 dic = {'k': 'v' } 对象:存储 属性 和 调用方法 dic['k'] = 'v' class Foo: def __init__(self, name, ag ...

  8. LOJ6066:「2017 山东一轮集训 Day3」第二题

    传送门 二分答案 \(k\),考虑如何 \(hash\) 使得做起来方便 把每个点挂在 \(k+1\) 级祖先上,考虑在祖先上删除 这道题巧妙在于其可以对于 \(dfs\) 序/括号序列 \(hash ...

  9. Maven学习总结(二):安装

    一:Maven下载 下载地址:http://maven.apache.org/download.cgi 下载完成后,得到一个压缩包,解压,可以看到maven的组成目录 Maven目录分析 bin:含有 ...

  10. drupal7 用到的一些钩子简介

    1.hook_user_delete($account) 可用于自定义模块中,当用户被删除时,可以自定义一些自己需要的处理动作 2.hook_mail_alter(&$message) 可用于 ...