遍历Dictionary<K,V>的两种方式

添加

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

things.Add(........);
things.Add(........);

第一种方式:可以使用Keys和values属性迭代集合中的键和值:

foreach(string key in things.Keys)
{

//  ......

}

//或

foreach(int value in things.Values)

{

//....

}

第二种方式:还可以迭代集合中的各个项,把每个项作为一个 KeyValuePair<K,V>实例来获取。

foreach(KeyValuePair<string,int> thing in things)
{
 Console.WriteLine("{0} = {1}",thing.Key,thing.Value);
}

另外关于Dictionary<K,V>,的key是不能重复的,如果添加相同的key就会抛出 ArgumentException异常。

但可能有这样的一个应用:key作用一个商品名,或者姓名,是不区分大小写的(应该当成同一个商品或者人物),但我们作为Key

加进去是不是抛异常的,但这却违反了我们的业务逻辑概念(我们的名字或商品名等是不区别大小写,即大小写不同的名字应该当成相同的key)

解决方法:在new  dictionary 时,可以把  IComparer<k> 接口传递给构造函数。我们可以在IComparer<K>接口中,我们比较每个名字(比如转化为小写再比较)。

这样就可以了。

时间: 2024-08-22 21:45:22

遍历Dictionary<K,V>的两种方式的相关文章

遍历获得磁盘文件的两种方式

在winform中可能有这种情况,遍历某一个文件夹得到当前文件夹中的所有文件以及子文件夹中的所有文件,以此类推,然后添加到一个TreeView控件中,或者通过控制台输出文件以及文件夹的名称.方法多种多样,下面说的是通过递归和队列的方式来进行.递归其实就是在函数调用的时候进行压栈进行的,所以可以概述为通过栈和队列来实现. 递归方式实现 private void GetAllFile (string strPath,TreeNode parentNode) { //得到当前路径下的所有文件和文件夹

HashMap遍历的两种方式,推荐使用entrySet()

转自:HashMap遍历的两种方式,推荐使用entrySet() 第一种: Map map = new HashMap(); Iterator iter = map.entrySet().iterator(); while (iter.hasNext()) {     Map.Entry entry = (Map.Entry) iter.next();     Object key = entry.getKey();     Object val = entry.getValue(); } 效率

JavaScript 算法应用: 遍历DOM树的两种方式

1 常见的DOM树结构: 2  DOM数遍历有两种方式: 3 广度优先代码: 4 深度优先遍历代码 原文地址:https://www.cnblogs.com/autoXingJY/p/9193600.html

C++ 数组遍历的两种方式

C++ 数组遍历的两种方式: #include <iostream> using namespace std; int main() { // 一维数组 int fibonacci[5] = {1, 1, 2, 3, 5}; // 使用索引遍历 // 求数组长度:sizeof(array)/sizeof(array[0]) cout << "Traverse By Index: "; for (int i = 0; i < sizeof(fibonacci

C#泛型集合之Dictionary&lt;k, v&gt;使用技巧

1.要使用Dictionary集合,需要导入C#泛型命名空间 System.Collections.Generic(程序集:mscorlib) 2.描述 1).从一组键(Key)到一组值(Value)的映射,每一个添加项都是由一个值及其相关连的键组成 2).任何键都必须是唯一的 3).键不能为空引用null(VB中的Nothing),若值为引用类型,则可以为空值 4).Key和Value可以是任何类型(string,int,custom class 等) 3.创建及初始化 Dictionary<

C#泛型集合—Dictionary&lt;K,V&gt;使用技巧

[csharp] view plaincopy 1.要使用Dictionary集合,需要导入C#泛型命名空间 System.Collections.Generic(程序集:mscorlib) 2.描述  1).从一组键(Key)到一组值(Value)的映射,每一个添加项都是由一个值及其相关连的键组成  2).任何键都必须是唯一的  3).键不能为空引用null(VB中的Nothing),若值为引用类型,则可以为空值  4).Key和Value可以是任何类型(string,int,custom c

03集合:List&lt;T&gt;,Dictionary&lt;K,V&gt;

List<T>泛型集合 List<T>是C#中一种快捷.易于使用的泛型集合类型,使用泛型编程为编写面向对象程序增加了极大的效率和灵活性. 1.List<T>用法 (1)创建一个List<T>泛型集合对象实例 List<T> list = new List<T>();// T 为列表中元素的类型 List<string> mlist = new List<string>();//创建了一个 string 类型的集

sparkStreaming读取kafka的两种方式

概述 Spark Streaming 支持多种实时输入源数据的读取,其中包括Kafka.flume.socket流等等.除了Kafka以外的实时输入源,由于我们的业务场景没有涉及,在此将不会讨论.本篇文章主要着眼于我们目前的业务场景,只关注Spark Streaming读取Kafka数据的方式. Spark Streaming 官方提供了两种方式读取Kafka数据: 一是Receiver-based Approach.该种读取模式官方最先支持,并在Spark 1.2提供了数据零丢失(zero-d

php处理无限极分类数据的两种方式

开发过程中,经常会遇到处理无限分类数据,这里就介绍一下处理无限分类数据的两种方式,有不对的地方,还望多多指正. //测试数据 $array=array( ['id'=>1,'parent_id'=>0,'name'=>1], ['id'=>2,'parent_id'=>0,'name'=>2], ['id'=>3,'parent_id'=>1,'name'=>3], ['id'=>4,'parent_id'=>1,'name'=>4]