百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 热门文章 > 正文

C#编程零基础到入门学习-C# Dictionary(字典)(4-13)

bigegpt 2024-08-09 11:09 2 浏览

在C#编程中,有一种特殊的数据类型叫做"字典"(Dictionary)。它是一种具有键值对的数据结构,其中每个键都是唯一的。这种类型在C#的System.Collections.Generic命名空间中,具体类型是Dictionary<TKey, TValue>。

字典特性

  • Dictionary<TKey, TValue> 存储键值对。
  • 属于System.Collection.Generic命名空间。
  • 实现 IDictionary <TKey,TValue>接口。
  • 键值对。每个元素都由一个唯一的键和一个值组成,不能为null。
  • 值可以为null或重复。
  • 快速查找。可以通过在索引器中传递相关键来访问值,例如 myDictionary[key]
  • 元素存储为 KeyValuePair <TKey,TValue> 对象。
  • 可动态调整大小。字典的大小可以根据需要动态调整

字典的主要作用如下:

  • 存储数据:字典可以存储大量的数据,并且可以快速地查找和访问这些数据。
  • 键值对:字典以键值对的形式存储数据,这种结构使得查找和访问数据非常高效。

字典的语法

Dictionary<TKey, TValue> dictionary = new Dictionary<TKey, TValue>();//语法格式
//TKey是键的类型,TValue是值的类型

示例代码:

Dictionary<string, int> myDictionary = new Dictionary<string, int>();
//字典的键是字符串类型,值是整数类型。
//通过键来添加、获取或删除值。

添加元素到字典:

dictionary.Add(key, value);

获取字典中的值:

TValue value = dictionary[key];

检查字典中是否包含某个键:

bool containsKey = dictionary.ContainsKey(key);

获取字典中的所有键或所有值:

ICollection<TKey> keys = dictionary.Keys;  
ICollection<TValue> values = dictionary.Values;

使用字典来存储和访问数据

字典的声明和初始化(创建字典)、简单使用

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

namespace DictionaryType
{
    internal class Program
    {
        static void Main(string[] args)
        {
            //声明、初始化(创建字典)
            Dictionary<string, int> myDictionary = new Dictionary<string, int>();
          // 添加键值对(添加元素)  
				myDictionary.Add("Apple", 1);//添加苹果1个
			  myDictionary.Add("Orange", 10);//添加橙子10个
           // 获取键对应的值  
 				int appleCount  = myDictionary["Apple"];//获取Apple对应的值1
 				int OrangeCount = myDictionary["Orange"];//获取Orange对应的值10
        Console.WriteLine("苹果数量: {0}",appleCount);//苹果数量:1
				Console.WriteLine("橙子数量: {0}",OrangeCount); //橙子数量:10
        }
    }
}
//报错提醒:
Dictionary<string, int> myDictionary = new Dictionary<string, int>();
//已经固定了该字典,键为string类型,值为int类型。
Dictionary<string, string> studentInfo = new Dictionary<string, string>();
//已经固定了该字典,键为string类型,值为string类型。因此就不再报错了。

字典的创建、添加、删除、更新完整示例代码:

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

namespace DictionaryType
{
    internal class Program
    {
        static void Main(string[] args)
        {
          //string,int
            Dictionary<string, int> myDictionary = new Dictionary<string, int>();
          //string,string
            Dictionary<string, string> studentInfo = new Dictionary<string, string>();
          
            // 添加一个键值对  
            myDictionary.Add("Apple", 1);
            myDictionary.Add("Orange", 10);
            studentInfo.Add("Name","ZhangSan");
            // 获取键对应的值  
            int appleCount  = myDictionary["Apple"];//获取Apple对应的值1
            int OrangeCount = myDictionary["Orange"];//获取Orange对应的值10
            string stuName = studentInfo["Name"];//获取Name对应的值ZhangSan
            //删除键值对
            //现在不想要“Apple”了
            myDictionary.Remove("Apple");
            //
            //Console.WriteLine(myDictionary["Apple"]);//由于不存在“Apple”会报错
            Console.WriteLine(myDictionary["Orange"]);//10
            Console.WriteLine("橙子数量: {0}",OrangeCount);//橙子数量:10
            Console.WriteLine("学生姓名: "+stuName);

            //修改字典中键值对的值
            //由于“Orange”数量是10,现在需要增加到20
          //修改字典中键值对的值
						int OrangeCount2 = myDictionary["Orange"];//再次获取Orange,对应的值20
						Console.WriteLine("橙子数量: {0}", OrangeCount2);//橙子数量:20
          
           //现在又想把橙子Orange20个换成香蕉Banana20个
            //方法:无法把橙子Orange直接修改成香蕉,只有先删除后添加
            myDictionary.Remove("Orange");//先删除
            myDictionary.Add("Banana",20);//后添加
            int BananaCount = myDictionary["Banana"];//获取Orange对应的值20
            Console.WriteLine("香蕉数量: {0}", OrangeCount2);//橙子数量:20
        }
    }
}


为什么不能直接修改字典中键呢?比如"Orange", 20直接修改"Banana",20。

在C#中,规定不能直接修改字典(Dictionary)中的键(Key)。原因是字典中的键必须是唯一的,如果试图更改现有的键,那么可能会出现两个键相同的情况,这违反了字典的数据结构规则。

然而,可以通过以下步骤来实现修改字典键值的目标:

  1. 删除原有的键值对。
  2. 添加新的键值对。

提示:

在C#中,字典(Dictionary)的值可以是任何类型。当你创建一个字典时,你需要指定键(Key)和值(Value)的类型。值的类型可以是任何有效的C#数据类型,包括基本数据类型(如 int、double、string 等)、自定义类、接口、委托、数组等。自定义类、接口、委托后面会陆续学到。

个人学习观点(针对新手入门)仅供参考:在学习到某个知识点时(比如本节,字典)以学习字典的相关知识点为主,如果涉及到学过的,那就去回顾,如果出现新的概念或者知识点,不要纠结,知道这个概念或者知识点存在关联即可,随着学习到是概念、知识点越来越多,印象也会进一步加深,各知识点之间的关联也会进一步加强,直到融会贯通。

常见字典键值的类型:

Dictionary<string, int> dictionary1 = new Dictionary<string, int>(); 
// 键为字符串,值为整数  
Dictionary<int, string> dictionary2 = new Dictionary<int, string>(); 
// 键为整数,值为字符串  
Dictionary<string, CustomClass> dictionary3 = new Dictionary<string, CustomClass>(); 
// 键为字符串,值为自定义类  
Dictionary<string, List<int>> dictionary4 = new Dictionary<string, List<int>>(); 
// 键为字符串,值为整数列表

常见的字典用法示例代码:

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

namespace DictionaryType2
{
    internal class Program
    {
        static void Main(string[] args)
        {
            Dictionary<string, int> dictionary = new Dictionary<string, int>();
            dictionary.Add("Apple", 1);
            dictionary.Add("Banana", 2);
            dictionary.Add("Orange", 3);
            int appleCount = dictionary["Apple"]; // 获取"Apple"对应的值  
            int bananaCount = dictionary["Banana"]; // 获取""Banana"对应的值
            int orangeCount = dictionary["Orange"];// 获取""Orange"对应的值
            bool containsKey = dictionary.ContainsKey("Banana"); // 检查字典中是否包含"Banana"这个键  
            ICollection<string> keys = dictionary.Keys; // 获取字典中的所有键
            ICollection<int> values = dictionary.Values; // 获取字典中的所有值
            Console.WriteLine(dictionary["Apple"]);//1
            Console.WriteLine(dictionary["Banana"]);//2
            Console.WriteLine(dictionary["Orange"]);//3
            Console.WriteLine(containsKey);//True


        }
    }
}

相关推荐

【Docker 新手入门指南】第十章:Dockerfile

Dockerfile是Docker镜像构建的核心配置文件,通过预定义的指令集实现镜像的自动化构建。以下从核心概念、指令详解、最佳实践三方面展开说明,帮助你系统掌握Dockerfile的使用逻...

Windows下最简单的ESP8266_ROTS_ESP-IDF环境搭建与腾讯云SDK编译

前言其实也没啥可说的,只是我感觉ESP-IDF对新手来说很不友好,很容易踩坑,尤其是对业余DIY爱好者搭建环境非常困难,即使有官方文档,或者网上的其他文档,但是还是很容易踩坑,多研究,记住两点就行了,...

python虚拟环境迁移(python虚拟环境conda)

主机A的虚拟环境向主机B迁移。前提条件:主机A和主机B已经安装了virtualenv1.主机A操作如下虚拟环境目录:venv进入虚拟环境:sourcevenv/bin/active(1)记录虚拟环...

Python爬虫进阶教程(二):线程、协程

简介线程线程也叫轻量级进程,它是一个基本的CPU执行单元,也是程序执行过程中的最小单元,由线程ID、程序计数器、寄存器集合和堆栈共同组成。线程的引入减小了程序并发执行时的开销,提高了操作系统的并发性能...

基于网络安全的Docker逃逸(docker)

如何判断当前机器是否为Docker容器环境Metasploit中的checkcontainer模块、(判断是否为虚拟机,checkvm模块)搭配学习教程1.检查根目录下是否存在.dockerenv文...

Python编程语言被纳入浙江高考,小学生都开始学了

今年9月份开始的新学期,浙江省三到九年级信息技术课将同步替换新教材。其中,新初二将新增Python编程课程内容。新高一信息技术编程语言由VB替换为Python,大数据、人工智能、程序设计与算法按照教材...

CentOS 7下安装Python 3.10的完整过程

1.安装相应的编译工具yum-ygroupinstall"Developmenttools"yum-yinstallzlib-develbzip2-develope...

如何在Ubuntu 20.04上部署Odoo 14

Odoo是世界上最受欢迎的多合一商务软件。它提供了一系列业务应用程序,包括CRM,网站,电子商务,计费,会计,制造,仓库,项目管理,库存等等,所有这些都无缝集成在一起。Odoo可以通过几种不同的方式进...

Ubuntu 系统安装 PyTorch 全流程指南

当前环境:Ubuntu22.04,显卡为GeForceRTX3080Ti1、下载显卡驱动驱动网站:https://www.nvidia.com/en-us/drivers/根据自己的显卡型号和...

spark+python环境搭建(python 环境搭建)

最近项目需要用到spark大数据相关技术,周末有空spark环境搭起来...目标spark,python运行环境部署在linux服务器个人通过vscode开发通过远程python解释器执行代码准备...

centos7.9安装最新python-3.11.1(centos安装python环境)

centos7.9安装最新python-3.11.1centos7.9默认安装的是python-2.7.5版本,安全扫描时会有很多漏洞,比如:Python命令注入漏洞(CVE-2015-2010...

Linux系统下,五大步骤安装Python

一、下载Python包网上教程大多是通过官方地址进行下载Python的,但由于国内网络环境问题,会导致下载很慢,所以这里建议通过国内镜像进行下载例如:淘宝镜像http://npm.taobao.or...

centos7上安装python3(centos7安装python3.7.2一键脚本)

centos7上默认安装的是python2,要使用python3则需要自行下载源码编译安装。1.安装依赖yum-ygroupinstall"Developmenttools"...

利用本地数据通过微调方式训练 本地DeepSeek-R1 蒸馏模型

网络上相应的教程基本都基于LLaMA-Factory进行,本文章主要顺着相应的教程一步步实现大模型的微调和训练。训练环境:可自行定义,mac、linux或者window之类的均可以,本文以ma...

【法器篇】天啦噜,库崩了没备份(天啦噜是什么意思?)

背景数据库没有做备份,一天突然由于断电或其他原因导致无法启动了,且设置了innodb_force_recovery=6都无法启动,里面的数据怎么才能恢复出来?本例采用解析建表语句+表空间传输的方式进行...