Dictionary入门
(1).Dictionary支持泛型,速度快,类型安全,不用担心装箱与拆箱带来的性能损耗,Hashtable不支持泛型;
(2).Dictionary <TKey,TValue>一出Hashtable就被淘汰了...你说哪个性能高?
(3).Hashtable里存的对象全部是object类型,所有对象存进去都被转成object类型,读取出来每次都需要转换类型,Hashtable对存入的类型没有限制,因此在读取转换类型时容易出错;
Dictionary只能存入定义时指定的类型,而且不像Hashtable会把类型转换成object,存取起来比前者方便,效率更高,因为不需要转换类型,所以不会出现Hashtable里的转换类型错误而报出程序异常;
(4).由于 Hashtable 和 Dictionary 同时存在, 在使用场景上必然存在选择性,并不任何时刻都能相互替代。
    [1] 单线程程序中推荐使用 Dictionary, 有泛型优势, 且读取速度较快, 容量利用更充分。
    [2] 多线程程序中推荐使用 Hashtable, 默认的 Hashtable 允许单线程写入, 多线程读取, 对 Hashtable 进一步调用 Synchronized() 方法可以获得完全线程安全的类型。 而 Dictionary 非线程安全, 必须人为使用 lock 语句进行保护, 效率大减。
    [3] Dictionary 有按插入顺序排列数据的特性 (注: 但当调用 Remove() 删除过节点后顺序被打乱), 因此在需要体现顺序的情境中使用 Dictionary 能获得一定方便。

public static void RunSnippet()
        {
            System.Collections.Generic.Dictionary<PointItem,int> dicPoint=new System.Collections.Generic.Dictionary<PointItem,int>();
            dicPoint.Add(PointItem.UNewAccount,50);
            dicPoint.Add(PointItem.ULogin,20);
            //dicPoint.Add(PointItem.ULogin,88);//异常: System.ArgumentException: 已添加了具有相同键的项。
            //修改值或添加值(不存在则添加)
            dicPoint[PointItem.ULogin]=88;
            dicPoint[PointItem.QCommentAnswer]=99;
            //用KeyValuePair遍历
            foreach(System.Collections.Generic.KeyValuePair<PointItem,int> ii in dicPoint)
                Console.WriteLine(string.Format("{0},{1}",ii.Key,ii.Value));
            Console.WriteLine("--------------------");
            //ContainsKey
            Console.WriteLine(dicPoint.ContainsKey(PointItem.QPutKnow));//Flase
            //Console.WriteLine(dicPoint[PointItem.QPutKnow]);//异常:System.Collections.Generic.KeyNotFoundException: 给定关键字不在字典中。
            //ContainsKey
            if(dicPoint.ContainsKey(PointItem.QPutKnow))
                Console.WriteLine(dicPoint[PointItem.QPutKnow]);
            //TryGetValue
            int iValue=0;
            if(dicPoint.TryGetValue(PointItem.QDeleteQuestion,out iValue))
                Console.WriteLine(iValue);
            else
                Console.WriteLine("PointItem.QDeleteQuestion 没有值");
            //ValueCollection
            System.Collections.Generic.Dictionary<PointItem,int>.ValueCollection valueColl=dicPoint.Values;
            foreach(int i in valueColl)
                Console.Write(string.Format("{0}/t",i));
            Console.WriteLine();
            //KeyCollection
            System.Collections.Generic.Dictionary<PointItem,int>.KeyCollection keyColl=dicPoint.Keys;
            foreach(PointItem pi in keyColl)
                Console.Write(string.Format("{0}/t",pi));
            Console.WriteLine();
            //Remove
            bool removeSuccess = dicPoint.Remove(PointItem.QPutQuestion);//不存在则False
            Console.WriteLine(removeSuccess);
        }

public enum PointItem
    {
        UNewAccount,
        ULogin,
        QPutQuestion,
        QAcceptAnswer,
        QCommentAnswer,
        AAnswer,
        ABestAnswer,
        QPutKnow,
        ACommentKnow,
        QQuestionOver,
        QDeleteQuestion
    };

Dictionary入门相关推荐

  1. vim 高级应用 原文地址 http://www.2maomao.com/blog/wp-content/uploads/vim_tips.txt

    最佳vim技巧 ---------------------------------------- # 信息来源 ---------------------------------------- www ...

  2. 7-Python3从入门到实战—基础之数据类型(字典-Dictionary)

    Python从入门到实战系列--目录 字典的定义 字典是另一种可变容器模型,且可存储任意类型对象:使用键-值(key-value)存储,具有极快的查找速度: 字典的每个键值(key=>value ...

  3. CS入门学习笔记6-MIT 6.00.1x-tuple,list,dictionary

    Lecture 6 对象 截止目前,已学习过的算法: Exhaustive enumeration Guess and check Bisection Divide and conquer 学习过的s ...

  4. SWIFT入门 Dictionary

    var menu:[String] = ["1","2","3"] print(menu.count) print(menu[0]) men ...

  5. 算法竞赛入门经典(第二版) | 例题5-3 安迪的第一个字典 (紫书牛啤!)(UVa10815,Andy's First Dictionary)

    概述: 输入一个文本,找出所有不同的单词,按字典序排序,去重后,输出,单词不分大小写. 储备知识: 1.sstring头文件的用法→sstring头文件函数详解 2.cctype头文件的用法→ccty ...

  6. Python 3 《dictionary》入门练习

    #!/usr/bin/env python # -*- coding:utf-8 -*- # author: Christal date: 2021/11/19# --------简单的字典创建和打印 ...

  7. python中字典是什么类型_Python入门-Python中的基本数据类型-dictionary(字典)

    字典是一种映射类型,字典用"{ }"标识,它是一个无序的"键(key) : 值(value)"对集合."键(key)"必须使用不可变类型,如 ...

  8. Farseer.net轻量级ORM开源框架 V1.x 入门篇:新版本说明

    导航 目   录:Farseer.net轻量级ORM开源框架 目录 上一篇:没有了 下一篇:Farseer.net轻量级ORM开源框架 V1.x 入门篇:数据库配置 前言 V1.x版本终于到来了.本次 ...

  9. Dictionary作为数据源绑定,调用c++库中返回为BYTE*的函数,listView项排序

    最近在做一个电子档案管理的项目.现在还处于初期,只是做一个简单demo拿去跟客户演示.至于最后谈不谈得下来,到底做不做,反正我是不看好,但没因为这样就马马虎虎.草草了事.这个项目算是b/s加c/s混合 ...

最新文章

  1. linux svn命令
  2. flask_入门教程之一
  3. xss原理、攻击方式与防御
  4. 支持nvme的linux_Linux nvme驱动初探
  5. 鸿蒙adb调试权限,真机ro.debuggable全局调试权限修改为1(Nexus 6为例)
  6. Python Imaging Library: ImageColor Module(图像颜色模块)
  7. java导出excel超出65536条处理
  8. iBATIS的自定义类型处理器TypeHandlerCallback解决乱码
  9. C# 获取当前程序集版本号,获取当前编译时间
  10. 【转载】robocopy的用法
  11. 【后台技术】异步编程指北,问题和重点
  12. [译]连接池和 Timeout expired异常
  13. 我的App-帝都地铁
  14. 55个美丽而独特的网站页眉设计欣赏
  15. Redisson3.10 RCacheMap踩坑记录
  16. 大学生金融欺诈现状出炉 微博借钱提示四大典型骗局
  17. 2022茶艺师(中级)考试题模拟考试题库及答案
  18. 友豆火山CPG插件开发001-简介初识
  19. Windows系统安全登录日志分析工具logonTracer汉化修正版
  20. 代码随想录训练营day43

热门文章

  1. 天翼云盘php插件,天翼云盘直接下载
  2. DSY2287*消失之物
  3. 递归神经网络的不可思议的有效性
  4. Could not transfer artifact org.springframework.boot
  5. 《转》笑死古人了,看看流行语用古文怎么说?
  6. python开发cs软件_开发cs软件 c python
  7. 电网电压及中国TN-S系统学习
  8. Java 内存溢出(一)原因、复现、排查
  9. 浅析B2C电商产品中的“库存”概念
  10. 2018年机器学习深度外文50篇