浅谈Dictionary用法

2023-11-16

一.基础篇                                  

 

1.Dictionary泛型类提供了从一组键到一组值的映射,即键和值的集合类。

2.Dictionary通过键来检索值的速度是非常快的,这是因为 Dictionary 类是作为一个哈希表来实现的。

3.定义方式:

 Dictionary<[Key], [Value]> openWith = new Dictionary<[Key], [Value]>();

 其中:Key代表此泛型类的键,不可重复。

    Value代表此泛型类中键对应的值。

    Key和Value可以用int,decimal,float等值类型,也可以用string,class等引用类型。

 举例:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace WebApplication1
{
    public partial class WebForm1 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            Test();
        }

        public void Test()
        {
            

            //Key为值类型   Value为值类型
            Dictionary<int, int> dicInt = new Dictionary<int, int>();
            //Key为值类型   Value为引用类型
            Dictionary<int, string> dicString = new Dictionary<int, string>();
            //Key为引用类型   Value为引用类型
            Dictionary<TestInfo, TestInfo> dicTestClass = new Dictionary<TestInfo, TestInfo>();
        }
    }

    public class TestInfo
    {
        public string ID { get; set; }

        public string Name { get; set; }

        public string Pwd { get; set; }
    }
}
View Code

4.添加键值对的方式:

 ①Dictionary.Add(Key,Value)方式: 

            //Key为值类型   Value为引用类型
            Dictionary<int, string> dicString = new Dictionary<int, string>();
            dicString.Add(0,"00001");
            dicString.Add(1, "00002");
            dicString.Add(2, "00003");
            dicString.Add(3, "00004");
View Code

 ②Dictionary[Key]=Value 方式:

            //Key为值类型   Value为引用类型
            Dictionary<int, string> dicString = new Dictionary<int, string>();
            dicString[0] = "00001";
            dicString[1] = "00002";
            dicString[2] = "00003";
            dicString[3] = "00004";
View Code

 ③两种方式对比:

  相同:二者皆可添加键值对。

  差异:第一种方式,当键不存在,相当于插入此键值对,当插入重复键时,则会引发ArgumentException类型的异常。

     第二种方式,当键不存在,相当于插入此键值对,当键存在时,相当于修改该键对应的值;当Dictionary[Key]取值

      时,如果此Key不存在,则会引发KeyNotFoundException异常。

 

  总结:添加键值对,推荐以第二种为主。

 

二.进阶篇                                         

 

1.ContainsKey(Key)判断键中是否含有此Key

            //Key为值类型   Value为引用类型
            Dictionary<int, string> dicString = new Dictionary<int, string>();
            dicString[0] = "00001";
            dicString[1] = "00002";
            dicString[2] = "00003";
            dicString[3] = "00004";

            if (dicString.ContainsKey(4))
            {
                Page.ClientScript.RegisterStartupScript(this.GetType(), "", "<script>alert('存在该键');</script>");
            }
            else
            {
                Page.ClientScript.RegisterStartupScript(this.GetType(), "", "<script>alert('不存在该键');</script>");
            }
View Code

2.ContainsValue(Value)判断值中是否含有此Value

            //Key为值类型   Value为引用类型
            Dictionary<int, string> dicString = new Dictionary<int, string>();
            dicString[0] = "00001";
            dicString[1] = "00002";
            dicString[2] = "00003";
            dicString[3] = "00004";

            if (dicString.ContainsValue("00004"))
            {
                Page.ClientScript.RegisterStartupScript(this.GetType(), "", "<script>alert('存在该值');</script>");
            }
            else
            {
                Page.ClientScript.RegisterStartupScript(this.GetType(), "", "<script>alert('不存在该值');</script>");
            }
View Code

3.Foreach和KeyValuePair<Key, Value>配合取出所有键值对

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            //Key为值类型   Value为引用类型
            Dictionary<int, string> dicString = new Dictionary<int, string>();
            dicString[0] = "00001";
            dicString[1] = "00002";
            dicString[2] = "00003";
            dicString[3] = "00004";

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

            Console.ReadKey();
        }
    }
}
View Code

4.Dictionary.Keys,Dictionary.Values和foreach配合取出所有key,所有value。(也可以利用第三步中单独取key和value)

            //取出所有key
            foreach (int key in dicString.Keys)
            {
                Console.WriteLine("Key={0}", key);
            }
            //取出所有value
            foreach (string value in dicString.Values)
            {
                Console.WriteLine("Value={0}",value);
            }
View Code

 5.Dictionary.Clear()和Dictionary.Remove(Key)移除键值对

            //移除所有的键和值
            dicString.Clear();
            //移除键为0的键值对
            dicString.Remove(0);
View Code

6.Dictionary.Reverse()进行反转序列输出

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            //Key为值类型   Value为引用类型
            Dictionary<int, string> dicString = new Dictionary<int, string>();
            dicString[0] = "00001";
            dicString[1] = "00002";
            dicString[2] = "00003";
            dicString[3] = "00004";

            //原始排序输出
            foreach (KeyValuePair<int,string> item in dicString)
            {
                Console.WriteLine("Key={0},Value={1}",item.Key,item.Value);
            }

            //进行反转排序,存入iList
            IEnumerable<KeyValuePair<int,string>> iList = dicString.Reverse();

            Console.WriteLine("-----------------------------------------");
            //反转输出
            foreach (KeyValuePair<int, string> item in iList)
            {
                Console.WriteLine("Key={0},Value={1}", item.Key, item.Value);
            }

            Console.ReadKey();

            //输出结果如下:

            /*
              Key=0,Value=00001
              Key=1,Value=00002
              Key=2,Value=00003
              Key=3,Value=00004
              ------------------------------------------------
              Key=3,Value=00004
              Key=2,Value=00003
              Key=1,Value=00002
              Key=0,Value=00001
             */
        }
    }
}
View Code

 

转载于:https://www.cnblogs.com/xilipu31/p/4027656.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

浅谈Dictionary用法 的相关文章

  • Python学习笔记--exe文件打包与UI界面设计

    exe文件打包与UI界面设计 前言 一 基于tkinter实现的UI设计 1 1 库的选择及思路 1 2 定位方法的选用 1 3 Frame控件 1 4 变量设置 1 5 批量设置 1 6 Text文本框 1 7 总体界面设计 1 8 功能
  • Qt——用于表格QTableView的模型

    如果想使用表格来呈现数据 Qt提供了一个方便的部件QTableWidget 但是直接用它实现一些功能可能比较困难 这里将介绍一种强大 灵活的方式来操作表格 一 模型 视图架构 在这个架构中 模型用于存储数据 视图用于呈现数据 除此之外 还有
  • Qt信号与槽的链接3种方法详解

    转载自 14条消息 Qt5 9 2 VS2017入门实例 透彻解析 冯爽朗的博客 CSDN博客 vs qt 示例 由于现在书上介绍的大部分都是Qt Creator 并没有介绍Qt VS的教程 虽然说很相似 但是也有很多地方不同 对于初学者特
  • Java课程设计之学习成绩管理系统

    package System import java awt import java awt event import java io import javax swing import javax swing table Abstract
  • Unity中Shader实现UI去色功能的实现思路

    文章目录 前言 一 在开发过程中 在UI中会涉及一些需要置灰UI的需求 有很多实现的方法 1 做两套纹理 通过程序控制切换 2 使用shader实现对纹理去色 二 这里主要记录用shader实现的思路 1 基础纹理的采样 2 支持组件中的调
  • 如何创建项目

    1 MvvmLight框架的引用 引用 头部选项卡的 工具栏 NuGet 包管理器 管理解决方案的NuGet 程序包 搜索 MVVM Light MvvmLight 作者 Laurent Bugnion GalaSoft 勾选项目 Do n
  • QPainter::setPen: Painter not active 解决方案

    今天在写代码的时候用到QPainter在窗口中绘制一些图形 出现错误 QPainter setPen Painter not active 百度上搜了也问了chatGPT没有很好的答案 无奈只好打开Qt API找问题 在Qt 文档中发现如下
  • UE4命令行使用,解释

    命令行在外部 从命令行运行编辑项目 1 导航到您的 LauncherInstall VersionNumber Engine Binaries Win64 目录中 2 右键单击上 UE4Editor exe 的可执行文件 并选择创建快捷方式
  • QT QTableWidget 表格 学习笔记

    首先 了解一下QTableWidget 控件的属性 成员方法 功能 setText const QString text 设置单元格中的文本 setlcon const Qlcon icon 给单元格添加图标 setBackground c
  • Qt 信号与槽

    Qt 信号与槽 在这章节里 我们学习 Qt 的信号与槽 这里分一个章节来学习这个 Qt 的信号与槽 可见 这个信号与槽有多么重要 在学习 Qt 的过程中 信号与槽是必不可少的部分 也是 Qt 编程的 基础 是 Qt 编程的一大创新 其实与
  • 如何启用 CSF 防火墙 Web UI

    ConfigServer 安全和防火墙 CSS 是适用于 Linux 系统的基于 iptables 的防火墙 在我们之前的教程中阅读了CSF在Linux系统上的安装教程 CSF 还提供内置 Web UI 用于从 Web 界面管理防火墙 在本
  • 「盘点」界面控件DevExtreme UI v23.1中的API增强

    DevExtreme gt https www evget com product 3150 拥有高性能的HTML5 JavaScript小部件集合 使您可以利用现代Web开发堆栈 包括React Angular ASP NET Core
  • app测试必掌握的核心测试:UI、功能测试!

    一 UI测试 UI即User Interface 用户界面 的简称 UI 设计则是指对软件的人机交互 操作逻辑 界面美观的整体设计 好的UI设计不仅是让软件变得有个性有品味 还要让软件的操作变得舒适 简单 自由 充分体现软件的定位和特点 手
  • UI 易用性测试 以及自动化实现!

    GUI 是指图形用户界面 UI 是指用户界面 对于纯软件系统 这两者没有本质的区别 GUI易用性测试与 UI 易用性测试内容一致 但是如果测试的对象是一个产品 这两者则存在区别 对于产品 UI 则不仅仅包括 GUI 还包括产品硬件部分的测试
  • 独立搭建UI自动化测试框架分享

    今天给大家分享一个selenium testng maven ant的UI自动化 可以用于功能测试 也可按复杂的业务流程编写测试用例 今天此篇文章不过多讲解如何实现CI CD 只讲解自己能独立搭建UI框架 如果有其他好的框架也可以联系我 分
  • 创意无限,绘图轻松——Sketch for Mac矢量绘图软件全面介绍

    在现代设计领域 矢量绘图软件是设计师们必不可少的工具之一 而在众多矢量绘图软件中 Sketch for Mac凭借其强大的功能和友好的用户界面脱颖而出 成为众多设计师的首选 Sketch for Mac是一款专为Mac用户开发的矢量绘图软件
  • element ui backTop源码解析-逐行逐析

    backTop 回到顶部 组件简介 基础概念 返回页面顶部的操作按钮 代码
  • HarmonyOS鸿蒙开发指南:容器组建 tabs开发指导

    目录 创建Tabs 设置Tabs方向 设置样式 显示页签索引 场景示例 创建Tabs 在pages index目录下的hml文件中创建一个Tabs组件 div class container div
  • Vue + Element-ui组件上传图片报错问题解决方案

    在使用Vue和Element ui组件上传图片时 可能会遇到一些报错问题 以下是一些常见的问题及解决方案 报错 TypeError Cannot read property name of undefined 解决方案 这个错误通常是因为在
  • UI自动化测试之Jenkins配置

    背景 团队下半年的目标之一是实现自动化测试 这里要吐槽一下 之前开发的测试平台了 最初的目的是用来做接口自动化测试和性能测试 但由于各种原因 接口自动化测试那部分功能整个废弃掉了 其中和易用性有很大关系 另外 也和我们公司的接口业务也有关

随机推荐

  • [MRCTF2020]千层套路1

    BUU题目复现 开局一个压缩包 flag全靠懵 拿到压缩包第一件事直接看能不能直接解压缩 很明显 有密码 不行 下一步 使用010Editor查看内部结构 发现确实操作着很多的 zip 文件 但是我使用binwalk foremost都没办
  • Python爬虫实战,requests模块,Python实现IMDB电影top数据可视化

    前言 利用Python爬取IMDB电影 废话不多说 让我们愉快地开始吧 开发工具 Python版本 3 6 4 相关模块 requests模块 random模块 bs4模块 以及一些Python自带的模块 环境搭建 安装Python并添加到
  • 凯恩帝对刀和刀补_KND数控车床试切对刀和调刀补

    展开全部 M 是测量的意思 有的系统是输32313133353236313431303231363533e78988e69d8331333262353363入你的测量值 然后点一个 测量 按钮 数控车对刀步骤 第一把刀的对刀步骤 第一步 确
  • linux 查询服务器的配置信息

    linux下看配置 可没有windows那么直观 你只能一个一个查看 一 cpu root srv more proc cpuinfo grep model name root srv grep model name proc cpuinf
  • 【Java数据结构】泛型详解+图文,通配符上界、下界

    0 泛型的本质 0 泛型的目的 1 泛型的语法 1 1 泛型的使用 2 包装类 2 1 装箱和拆箱 2 2 1练习题 3 泛型如何编译 4 泛型的上界 5 通配符 5 1通配符上界 5 2通配符下界 有坑填坑 0 泛型的本质 泛型的本质 泛
  • 【目标检测】25、Sparse R-CNN: End-to-End Object Detection with Learnable Proposals

    文章目录 一 背景 二 动机 三 方法 3 1 Backbone 3 2 Learnable proposal box 3 3 Learnable proposal feature 3 4 Dynamic instance interact
  • 【转载】Android Studio工程目录解析

    转载自CSDN网友HaiBing Android Studio工程目录结构分析 上 Android Studio工程目录结构分析 下 目录 Android Studio工程目录结构分析 上 Android Studio工程目录 app目录结
  • nltk_data无法下载或无法使用问题的解决方案之一

    nltk data无法下载或无法使用问题的解决方案汇总 报错展示 问题解决 本人使用的方法 1 手动下载 nltk data 数据压缩包 2 解压压缩包 找到packages文件夹 3 将packages文件夹中的文件全部复制到nltk d
  • 你是不是一个优秀的项目经理人(转)

    下面是项目管理之中最重要的一些技能被简化成的一些简单的小问题 你可以用它来测试你自己的水平 一 你没有很好地计划是因为你认为自己是一个执行者而不是计划者 很多人认为他们自己是行动型的 当他们被指派了一项任务时 他们的第一个反应就是着手开始解
  • 四、SpringBoot框架

    目录 什么是SpringBoot框架 SpringBoot的特点 作用 必会 简箱版tomcat 优缺点 面试 SpringBoot运行原理 开箱即用的全过程 SpringBoot是如何完成自动配置的 面试 SpringBoot启动项 St
  • C++面向对象------继承+多态

    概念 1 继承是从已有的类创建新类的过程 这使得创建和维护一个应用程序变得更容易 达到了重用代码功能和提高执行时间的效率 2 继承呈现了面向对象程序设计的层次结构 体现了从简单到复杂的认知过程 3 在c 类中 如果类b继承于类a 则类a叫做
  • uiautomator2常见的API操作

    click int x int y pressHome getCurrentActivityName pressMenu getCurrentPackageName takeScreenshot File storePath getDisp
  • 在typora中插入图片和视频

    在typora中插入图片和视频 sm ms图床 免费方案使用sm ms图床 这个东西很好用而且免费 使用方法可以参考 需要配置的点就是下面这一段 picBed uploader smms smms token 这里是你的smmstoken
  • 记录缓存知识

    所谓的缓存 就是将程序或系统经常du要调用的对象存在内存中 一遍其使用zhi时可以快速调用dao 不必再去创建新的重复的实例 这样做可以减少系统开销 提高系统效率 1 通过文件缓存 顾名思义文件缓存是指把数据存储在磁盘上 不管你是以XML格
  • 详解Linux系统中的软件管理及软件仓库

    目录 一 Linux中软件包的类型 二 软件包的名称结构 三 rpm命令管理软件包 四 本地软件仓库的搭建 五 dnf软件管理命令 总结 一 Linux中软件包的类型 DEB UEBlinux DEBlinux RPM redhat cen
  • Linux系统下对树莓派镜像进行烧写操作。可搭建自己的迷你服务器

    烧写后可以当做搭建自己的迷你服务器或者可携带的计算机哦 我以linux系统下对内存卡进行烧写镜像 烧写的先以snappy ubuntu care为例 网上的资料大多都是win下操作的 步 1 购买嵌入式开发板 可选够集成度大的 可烧写系统的
  • 【ES小结】还在用ElasticSearch做查询?换条思路实现高效数据统计

    博客首页 派 大 星 欢迎关注 点赞 收藏 留言 本文由派大星原创编撰 系列专栏 ES小结 本系列记录ElasticSearch技术学习历程以及问题解决 ElasticSearch高效数据统计 聚合查询 什么是聚合查询 Kibana 命令测
  • logback日志配置

  • Top-level statements must precede namespace and type declarations. [Test]csharp(CS8803)

    C NET 6 结构体 C 控制台应用程序定义了一个结构体 然后创建结构体实例 报如下错误 Top level statements must precede namespace and type declarations Test csh
  • 浅谈Dictionary用法

    一 基础篇 1 Dictionary泛型类提供了从一组键到一组值的映射 即键和值的集合类 2 Dictionary通过键来检索值的速度是非常快的 这是因为 Dictionary 类是作为一个哈希表来实现的 3 定义方式 Dictionary