C#编程(五十三)----------字典DictionaryTKey,TValue
字典
关键字:Dicitionary
说明:
必须包含命名空间System.Collection.Generic
Dictionary里面的每一个元素都是一个键值对(由两个元组组成:键和值).
键必须是唯一的,而值不需要唯一的.
键和值都可以是任意类型(例如:string,int,自定义类型,等等)
通过一个键读取一个值的事件是接近O(1)
键值对之间的偏序可以不定义
使用案例:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Collections.Generic;
namespace 字典
{
class Program
{
static void Main(string[] args)
{
//定义
Dictionary<string, string> openWith = new Dictionary<string, string>();
//添加元素
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 (var item in openWith.Keys)
{
Console.WriteLine("Key = {0}", item);
}
//遍历value
foreach (var item in openWith.Values)
{
Console.WriteLine("value = {0}", item);
}
//遍历value的第二种方法
Dictionary<string, string>.ValueCollection valueColl = openWith.Values;
foreach (var item in valueColl)
{
Console.WriteLine("value = {0}", item);
}
//遍历字典
foreach (KeyValuePair<string, string> item in openWith)
{
Console.WriteLine("key = {0} , value = {1} ", item.Key, item.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"))
{
Console.WriteLine("An element with Key = \"bmp\" exists.");
}
//参数为其他类型
Dictionary<int, string[]> OtherType = new Dictionary<int, string[]>();
OtherType.Add(1, "1,11,111".Split(','));
OtherType.Add(2, "2,22,222".Split(','));
Console.WriteLine("其他类型 : " + OtherType[1][2]);
//参数为自定义类型
//声明并添加元素
Dictionary<int, DouCube> MyType = new Dictionary<int, DouCube>();
for (int i = 1; i <= 9; i++)
{
DouCube element = new DouCube();
element.Code = i * 100;
element.Page = "http://www.doucube.com/" + i.ToString() + ".html";
MyType.Add(i, element);
}
//遍历元素
foreach (KeyValuePair<int, DouCube> kvp in MyType)
{
Console.WriteLine("Index {0} Code:{1} Page:{2}", kvp.Key, kvp.Value.Code, kvp.Value.Page);
}
}
}
public 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;
}
}
常用属性
名称 |
说明 |
Comparer |
获取用于确定字典中的键是否相等的IEqualityComParer<T> |
Count |
获取包含在Dictionary<TKey,TValue>中的键/值对的数目 |
Item |
获取或设置与指定的键相关联的值 |
Keys |
获取包含Dictionary<TKey,TValue>中的键的集合 |
Values |
获取包含Dictionary<TKey,TValue>中的值的集合 |
常用方法
名称 |
说明 |
Add |
将指定的键和值添加到字典中 |
Clear |
从Dictionary<TKey,TValue>中移除所有的键和值 |
ContainsKey |
确定Dictionary<TKey,TValue>是否包含指定的键 |
ContainsValue |
确定Dictionary<TKey,TValue>是否包含指定的值 |
Equals(object) |
确定指定的Object是否等于当前的object(继承自object) |
Finalize |
允许对象在”垃圾回收”回收之前尝试释放资源并执行其他清理操作(继承自object) |
GetEnumerator |
返回循环访问Dictionary<TKey,TValue>的枚举器 |
GetHashCode |
用作特定类型的哈希函数(继承自object) |
GetObjectData |
实现System.Runtime.Serialization.ISerializable接口,并返回序列化Dictionary<TKey,TValue>实例所需的数据 |
GetType |
获取当前实例的Type(继承自Object) |
MemberwiseClone |
创建当前object的浅表副本(继承自Object) |
OnDeserialization |
实现System.Runtime.Serialization.ISerializable接口,并在完成反序列化之后引发序列化事件 |
Remove |
从Dictionary<TKey,Tvalue>中移除所指定的键的值 |
ToString |
返回表示当前对象的字符串 |
TryGetValue |
获取与指定的键相关联的值. |
总结Dictionary:
字典也称为映射表或散列表,主要特定是可以根据键快速查找值,也可以自由删除添加元素,在删除添加时,不会像列表一样,移动之后的所有元素,产生内存的开销.
.NET中提供了几个字典,可以使用最主要的类是Dictionary<TKey,TValue>,这个类与我们上面说的SoreedList用法完全一样.
键的类型:
用作字典中键的类型必须重写object类中的GetHashCode()方法,只要字典类需要确定元素的位置,就要调用本方法.
字典内部通过调用这个方法的返回值,来计算产生散列(这是一个算法,不去研究,它涉及一个素数),所以字典的容量是一个素数.
GetHashCode()方法的实现需要遵循以下几点:
1.相同的对象应总是返回相同的值
2.不同的对象可以返回相同的值
3.应执行额比较快,计算的开销不大
4.不能抛出异常
5.应至少使用一个实例字段
6.散列码值应平均分布在int可以存储的整个数字区域
7.散列码最好在对象的生存期中不发生变化
提示:字典的性能取决于GetHashCode()方法的实现代码
转载于:https://www.cnblogs.com/FinleyJiang/p/7602705.html
C#编程(五十三)----------字典DictionaryTKey,TValue相关推荐
- 【零基础学Java】—网络编程(五十三)
[零基础学Java]-网络编程(五十三) 一.软件结构 C/S结构:全称为Client/Server结构,是指客户端和服务器结构,常见的程序有QQ.迅雷等软件 B/S:全称为Browser/Serve ...
- 五十三、开始算法刷题磨练
@Author: Runsen 从大一写Python文章,到现在其都有上百篇,现在到了五十三,我觉得这个时候应该去刷题了,其实很多学Python的都不是专科的,都是给培训机构宣传牛逼,其实在编程语言中 ...
- 学习ASP.NET Core Razor 编程系列十三——文件上传功能(一)
原文:学习ASP.NET Core Razor 编程系列十三--文件上传功能(一) 学习ASP.NET Core Razor 编程系列目录 学习ASP.NET Core Razor 编程系列一 学习A ...
- [笔记]Windows核心编程《十三》windows内存体系结构
系列文章目录 [笔记]Windows核心编程<一>错误处理.字符编码 [笔记]Windows核心编程<二>内核对象 [笔记]Windows核心编程<三>进程 [笔记 ...
- 五轴编程_沙井万丰数控数控编程五轴编程那个软件好用
沙井万丰数控数控编程五轴编程那个软件好用设计需要掌握很高很全面的知识和技能,模具做的好,产品质量好,模具结构合理,生产效率高,工厂效益好.正因如此,模具技术工在外打工的工资都非常的高.少则每月几千元, ...
- 【Python基础知识-pycharm版】第五节-字典\集合
第五节-字典\集合\控制语句 字典 字典的创建 字典元素的访问 字典元素添加.修改.删除 序列解包 表格数据使用字典和列表存储,并实现访问 字典核心底层原理(重要) 集合 集合相关操作 字典 字典是& ...
- JavaScript学习(五十三)—借用构造方法继承
JavaScript学习(五十三)-借用构造方法继承 一.借用构造方法的继承 格式: function 构造方法1(形参1,形参2,形参3...){构造方法1.call(this,形参1,形参2,形参 ...
- python编程词典_Python 字典(Dictionary)操作详解
Python字典是另一种可变容器模型,且可存储任意类型对象,如字符串.数字.元组等其他容器模型. 一.创建字典 字典由键和对应值成对组成.字典也被称作关联数组或哈希表.基本语法如下: dict = { ...
- 【正点原子STM32连载】第五十三章 DSP测试实验 摘自【正点原子】MiniPro STM32H750 开发指南_V1.1
1)实验平台:正点原子MiniPro H750开发板 2)平台购买地址:https://detail.tmall.com/item.htm?id=677017430560 3)全套实验源码+手册+视频 ...
最新文章
- 解决Javascript疲劳的方法-以及其他所有疲劳
- mysql返回yyyy mm dd_怎么把取出mysql数据库中的yyyy-MM-dd日期转成yyyy年MM月dd日格式...
- Event用计算机语言,求高人解释下一段计算机语言。
- 学习方法:提出和解决问题
- input 下面的span 标签 作为下拉框选项的点击
- google海底光缆图_谷歌地图资讯-2013版“海底光缆地图”发布
- Python简答题编程题
- C# 利用Excel及Spire.xls实现用户自定义打印模板
- Application provided invalid, non monotonically increasing dts to muxer in stream
- 论文 | 深度学习股票预测
- win10误删除efi引导文件
- 打开Flutter动画的另一种姿势——Flare,android面试题选择题
- 5个常用的CMD命令
- c++高级编程学习笔记5
- 多媒体的一些基本概念
- 猫 老鼠 人的编程题
- 编辑距离与语音识别中WER的计算
- PyCharm 2019
- 2019年美赛建模D题后续(1)
- 如何启用GPO回送处理
热门文章
- 阿里开源新一代人机对话模型 ESIM,曾创下人机对话准确率新纪录
- 「机器学习速成」数据预处理,特征工程,良好特征的特点
- 【周鸿祎:当下AI技术并不完善,存四大“冰点”】
- SAP MM 如何得到委外加工采购订单中需要发给subcontractor的物料的信息?
- 应用丨AI和机器学习如何改变美国政府决策方式
- 人物丨深度学习大神Hinton推翻自己30年的学术成果另造新世界
- sklearn警告:ConvergenceWarning: lbfgs failed to converge (status=1):
- 为了节省能量,人类演化出了“不合规律”的大脑神经元 | Nature
- Cerebras发布全球首个人类大脑规模的AI解决方案
- 有关增强现实技术的过去、现在和未来的发展