Dictionary是一个泛型
他本身有集合的功能有时候可以把它看成数组
他的结构是这样的:Dictionary
他的特点是存入对象是需要与[key]值一一对应的存入该泛型
通过某一个一定的[key]去找到对应的值
举个例子:
//实例化对象
Dictionary dic = new Dictionary();
//对象打点添加
dic.Add(1, "one");
dic.Add(2, "two");
dic.Add(3, "one");
//提取元素的方法
string a = dic[1];
string b = dic[2];
string c = dic[3];
//1、2、3是键,分别对应“one”“two”“one”
//上面代码中分别把值赋给了a,b,c
//注意,键相当于找到对应值的唯一标识,所以不能重复
//但是值可以重复
如果你还看不懂我最后给你举一个通俗的例子
有一缸米,你想在在每一粒上都刻上标记,不重复,相当于“键”当你找的时候一一对应不会找错,这就是这个泛型的键的-作用,而米可以一样,我的意思你明白了吧?
-------------------------------------------------------------------------
c# 对dictionary类进行排序用什么接口实现如果使用.Net Framework 3.5的话,事情就很简单了。呵呵。
如果不是的话,还是自己写排序吧。
using System;
using System.Collections.Generic;
using System.Text;
using System.Linq;
namespace DictionarySorting
{
class Program
{
static void Main(string[] args)
{
Dictionary dic = new Dictionary();
dic.Add(1, "HaHa");
dic.Add(5, "HoHo");
dic.Add(3, "HeHe");
dic.Add(2, "HiHi");
dic.Add(4, "HuHu");
// 遍历字典
var result = from pair in dic orderby pair.Key select pair;
foreach (KeyValuePair pair in result)
{
Console.WriteLine("Key:{0}, Value:{1}", pair.Key, pair.Value);
}
Console.ReadKey();
}
}
}
【执行结果】
Key:1, Value:HaHa
Key:2, Value:HiHi
Key:3, Value:HeHe
Key:4, Value:HuHu
Key:5, Value:HoHo
Dictionary的基本用法。假如
需求:现在要导入一批数据,这些数据中有一个称为公司的字段是我们数据库里已经存在了的,目前我们需要把每个公司名字转为ID后才存入数据库。
分析:每导一笔记录的时候,就把要把公司的名字转为公司的ID,这个不应该每次都查询一下数据库的,因为这太耗数据库的性能了。
解决方案:在业务层里先把所有的公司名称及相应的公司ID一次性读取出来,然后存放到一个Key和Value的键值对里,然后实现只要把一个公司的名字传进去,就可以得到此公司相应的公司ID,就像查字典一样。对,我们可以使用字典Dictionary操作这些数据。
示例:SetKeyValue()方法相应于从数据库里读取到了公司信息。
///
/// 定义Key为string类型,Value为int类型的一个Dictionary
///
///
protected Dictionary SetKeyValue()
{
Dictionary dic = new Dictionary();
dic.Add("公司1", 1);
dic.Add("公司2", 2);
dic.Add("公司3", 3);
dic.Add("公司4", 4);
return dic;
}
///
/// 得到根据指定的Key行到Value
///
protected void GetKeyValue()
{
Dictionary myDictionary = SetKeyValue();
//测试得到公司2的值
int directorValue = myDictionary["公司2"];
Response.Write("公司2的value是:" + directorValue.ToString());
}
例二:
///
/// 消息(传递)中心
/// 负责UI框架中,所有UI窗体间的数据传值
///
public class MessageCenter
{
// 定义一个委托. 观察者模式
public delegate void DelegateMessageDelivery(KeyValueUpdate kv);
// 声明委托实例. 消息中心缓存集合:
// string: 监听的类型( 数据大的分类),
// DelegateMessageDelivery: 监听到以后要执行的委托
public static Dictionary _dicMessages
= new Dictionary();
///
/// 增加委托指向的方法:监听消息
///
/// 消息分类
/// 消息委托
public static void AddMsgListener(string messageType, DelegateMessageDelivery handler)
{
if (!_dicMessages.ContainsKey(messageType))
{
_dicMessages.Add(messageType, null);
}
_dicMessages[messageType] += handler;
}
///
/// 委托指向的方法:取消消息的监听
///
///
///
public static void RemoveMsgListener(string messageType, DelegateMessageDelivery handler)
{
if (_dicMessages.ContainsKey(messageType))
{
_dicMessages[messageType] -= handler;
}
}
///
/// 委托指向的方法:取消所有消息的监听
///
public static void RemoverAllMsgListener()
{
if (_dicMessages != null)
{
_dicMessages.Clear();
}
}
}
说明
必须包含名空间System.Collection.Generic Di[By 博客园 GoCircle]ctionary里面的每一个元素都是一个键值对(由二个元素组成:键和值) 键必须是唯一的,而值不需要唯一的 键和值都可以是任何类型(比如:string, int, 自定义类型,等等) 通过一个键读取一个值的时间是接近O(1) 键值对之间的偏序可以不定义
使用方法:
//定义 Dictionary openWith = new Dictionary();
//添加元素 openWith.Add("txt", "notepad.exe"); openWith.Add("bmp", "paint.exe"); openWith.Add("dib", "paint.exe"); openWith.Add("rtf", "wordpad.exe");
//取值 Console.WriteLine("For key = \"rtf\", value = {0}.", openWith["rtf"]);
//更改值 openWith["rtf"] = "winword.exe"; Console.WriteLine("For key = \"rtf\", value = {0}.", openWith["rtf"]);
//遍历key foreach (string key in openWith.Keys) { Console.WriteLine("Key = {0}", key); }
//遍历value foreach (string value in openWith.Values) { Console.WriteLine("value = {0}", value); } //遍历value, Second Method Dictionary.ValueCollection valueColl = openWith.Values; foreach (string s in valueColl) { Console.WriteLine("Second Method, Value = {0}", s); }
//遍历字典 foreach (KeyValuePair kvp in openWith) { Console.WriteLine("Key = {0}, Value = {1}", kvp.Key, kvp.Value); }
//添加存在的元素 try { openWith.Add("txt", "winword.exe"); } catch (ArgumentException) { Console.WriteLine("An element with Key = \"txt\" already exists."); }
//删除元素
openWith.Remove("doc"); if (!openWith.ContainsKey("doc")) { Console.WriteLine("Key \"doc\" is not found."); }
//判断键存在 if (openWith.ContainsKey("bmp")) // True { Console.WriteLine("An element with Key = \"bmp\" exists."); }
参数为其他[欢迎转载听雨的人博客]类型
//参数为其它类型 Dictionary OtherType = new Dictionary(); OtherType.Add(1, "1,11,111".Split(',')); OtherType.Add(2, "2,22,222".Split(',')); Console.WriteLine(OtherType[1][2]);
参数为自定义类型
首先定义类
class DouCube { public int Code { get { return _Code; } set { _Code = value; } } private int _Code; public string Page { get { return _Page; } set { _Page = value; } } private string _Page; }
然[By cnblogs.com/GoCircle]后
//声明并添加元素 Dictionary MyType = new Dictionary(); for (int i = 1; i关注打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?