c# 哈希表(Hash Table)

        在 C# 中,哈希表(Hash Table)是一种基于哈希函数实现的数据结构,用于存储键值对。哈希表允许快速插入、删除和查找操作,其性能通常比线性数据结构(如数组或链表)更优秀,特别在大数据集时效果明显。

        在哈希表中,每个键都经过哈希函数计算得到一个哈希码(hash code),然后根据哈希码确定其在内部数据结构中的存储位置。这使得在理想情况下,我们可以在常数时间内访问、插入或删除键值对。然而,由于哈希碰撞(即不同键具有相同哈希码)的存在,实际实现中需要解决冲突的问题,常见的方法包括开放寻址法和链表法。

        在 C# 中,哈希表通常通过 `Dictionary<TKey, TValue>` 泛型类实现。`Dictionary` 在内部使用哈希表作为存储结构,允许快速查找和操作其键值对。除了 `Dictionary`,C# 中还有其他一些实现哈希表的类,例如 `Hashtable` 类,但 `Dictionary` 更常用、更推荐使用。

        哈希表在 C# 中是一种常用的数据结构,用于高效地存储和查找键值对。开发者可以利用哈希表的快速查找特性来提升程序的性能。

示例一 使用 `Dictionary` 类来实现哈希表:

using System;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        // 创建一个 Dictionary 实例
        Dictionary<string, int> hashTable = new Dictionary<string, int>();

        // 添加键值对到哈希表
        hashTable.Add("apple", 10);
        hashTable.Add("banana", 5);
        hashTable.Add("orange", 8);

        // 获取和打印值
        Console.WriteLine("Number of apples: " + hashTable["apple"]);
        Console.WriteLine("Number of bananas: " + hashTable["banana"]);
        Console.WriteLine("Number of oranges: " + hashTable["orange"]);

        // 检查键是否存在
        if (hashTable.ContainsKey("kiwi"))
        {
            Console.WriteLine("Number of kiwis: " + hashTable["kiwi"]);
        }
        else
        {
            Console.WriteLine("Kiwi not found in the hash table.");
        }
    }
}
        在这个示例中,创建了一个 `Dictionary` 实例 `hashTable`,并向其中添加了几个键值对。然后使用键来获取和打印相应的值,并演示如何检查某个键是否存在于哈希表中。

示例二 使用 `Hashtable` 类:

//C#程序来说明如何
//创建哈希表
using System;
using System.Collections;
 
class GFG {
 
    // Main Method
    static public void Main()
    {
 
        //创建哈希表
        //使用Hashtable类
        Hashtable my_hashtable1 = new Hashtable();
 
        // Adding key/value pair 
        // in the hashtable
        // Using Add() method
        my_hashtable1.Add("A1", "Welcome");
        my_hashtable1.Add("A2", "to");
        my_hashtable1.Add("A3", "GeeksforGeeks");
 
        Console.WriteLine("Key and Value pairs from my_hashtable1:");
 
        foreach(DictionaryEntry ele1 in my_hashtable1)
        {
            Console.WriteLine("{0} and {1} ", ele1.Key, ele1.Value);
        }
 
        //创建另一个哈希表
        //使用Hashtable类
        //以及添加键/值对
        //不使用Add方法
        Hashtable my_hashtable2 = new Hashtable() {
                                      {1, "hello"},
                                          {2, 234},
                                        {3, 230.45},
                                         {4, null}};
 
        Console.WriteLine("Key and Value pairs from my_hashtable2:");
 
        foreach(var ele2 in my_hashtable2.Keys)
        {
            Console.WriteLine("{0}and {1}", ele2,
                            my_hashtable2[ele2]);
        }
    }

输出:

Key and Value pairs from my_hashtable1:
A3 and GeeksforGeeks 
A2 and to 
A1 and Welcome 
Key and Value pairs from my_hashtable2:
4and 
3and 230.45
2and 234
1and hello

如何从哈希表中删除元素:
在哈希表中,您可以从哈希表中删除元素。Hashtable 类提供了两种不同的方法来删除元素,方法是:

Clear:此方法用于从哈希表中删除所有对象。
Remove:此方法用于从哈希表中删除具有指定键的元素。

my_hashtable.Clear();

my_hashtable.Clear(); 

如何检查哈希表中键/值对的可用性:
在哈希表中,您可以使用以下方法检查给定的对是否存在:

Contains:此方法用于检查 Hashtable 是否包含特定键。
ContainsKey:此方法还用于检查 Hashtable 是否包含特定键。
ContainsValue:此方法用于检查 Hashtable 是否包含特定值。

Console.WriteLine(my_hashtable.Contains("A3"));
Console.WriteLine(my_hashtable.Contains(12));
Console.WriteLine();

Console.WriteLine(my_hashtable.ContainsKey("A1"));
Console.WriteLine(my_hashtable.ContainsKey(1));
Console.WriteLine();

Console.WriteLine(my_hashtable.ContainsValue("geeks"));
Console.WriteLine(my_hashtable.ContainsValue("to"));
Console.WriteLine();

如何更新哈希表:
在 C# 中,Hashtable 类不提供直接方法来更新现有键的值。但是,您可以通过以下步骤实现更新:

使用 ContainsKey 方法检查哈希表中是否存在该键。
如果该键存在,则使用该键检索当前值并将其存储在变量中。
使用相同的键将新值分配给哈希表中的键。
或者,如果需要,可以删除旧的键/值对。

using System;
using System.Collections.Generic;
 
class Program
{
    static void Main()
    {
        //创建字典
        Dictionary<string, string> dictionary = new Dictionary<string, string>();
         
        //添加一些键值对
        dictionary.Add("key1", "value1");
        dictionary.Add("key2", "value2");
 
        //更新现有key的值
        string keyToUpdate = "key1";
        if (dictionary.ContainsKey(keyToUpdate))
        {
            dictionary[keyToUpdate] = "updatedValue";
        }
 
        //访问更新的值
        string updatedValue;
        if (dictionary.TryGetValue(keyToUpdate, out updatedValue))
        {
            Console.WriteLine("Updated value: " + updatedValue);
        }
 
        //打印字典中的所有键值对
        foreach (KeyValuePair<string, string> kvp in dictionary)
        {
            Console.WriteLine("Key: " + kvp.Key + ", Value: " + kvp.Value);
        }
    }
}

希望以上示例能帮助你了解如何在 C# 中使用哈希表。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/695632.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

centos docker已启动的jenkin 配置 maven 并重启

在 CentOS 系统中&#xff0c;如果已经有一个正在运行的 Docker 容器中的 Jenkins&#xff0c;并且你想要更新配置以使用宿主机上的 Maven&#xff0c;可以按照以下步骤操作&#xff1a; 查看当前运行的 Jenkins 容器&#xff1a; docker ps -a找到你的 Jenkins 容器 ID 或名称…

3028. 边界上的蚂蚁

说在前面 &#x1f388;不知道大家对于算法的学习是一个怎样的心态呢&#xff1f;为了面试还是因为兴趣&#xff1f;不管是出于什么原因&#xff0c;算法学习需要持续保持。 题目描述 边界上有一只蚂蚁&#xff0c;它有时向 左 走&#xff0c;有时向 右 走。 给你一个 非零 整…

CSS列表学习2

之前学习了列表&#xff1b;继续熟悉&#xff1b; <!DOCTYPE html> <html> <head> <meta http-equiv"Content-Type" content"text/html; charsetutf-8"/><title></title><meta charset"utf-8" /><…

leetcode hot100单词拆分

在本题中&#xff0c;我们是要把一个字符串&#xff0c;判断是否能用给的字符串数组中的单词进行拆分&#xff0c;如果可以则返回true&#xff0c;不能的话则返回false。这个题一开始看无法与背包问题联系在一起。但仔细考虑&#xff0c;就是用物品&#xff08;给的字符串数组中…

操作系统学习案例20240222-liunx自定义systemctl系统服务

1 概述信息 通过tar安装的mysql一般需要直接使用mysql safe进行启动。&#xff08;其实用service比较简洁&#xff0c;谁让现在都在用systemctl了&#xff09; 2 使用service方案 cp ${mysql}sql/support-files/mysql.server /etc/init.d/mysqld service start mysqld 3 使用…

【uni.app】动态赋值字典类数据的问题及解决方案

示例有data属性 data() {return {RecordDic: {}, //键为年月日期&#xff0c;值为对应年月数据test: ,//用于刷新数据视图}}, 有以下动态数据&#xff1a; //动态数据格式 DayRecordDic{2024-02-01:{type:0,hours:8.59,} } //获取动态数据GetDynamicData() {var that this…

Android GMS版本连接wifi后提示网络受限问题

目录 问题现象&#xff1a; 原因分析&#xff1a; 解决方法&#xff1a; GMS版本 问题现象&#xff1a; Android系统连接wifi后在SystemUI上wifi图标会显示一个感叹号&#xff0c;提示网络受限。但实际网络能访问。 原因分析&#xff1a; 可参考&#xff1a;Android9.0 网…

OpenCart程序结构与业务逻辑

一、程序业务逻辑说明 在 OpenCart 中&#xff0c;index.php 文件是整个应用程序的入口文件&#xff0c;它负责初始化应用程序并调度请求。以下是 index.php 文件加载执行的流程&#xff1a; 1. **设置路径常量&#xff1a;** - index.php 首先定义了一些重要的路径常量&…

HarmonyOS Stage模型 权限申请

配置声明权限 在module.json5配置文件中声明权限。不论是system_grant还是user_grant类型都需要声明权限&#xff0c;否则应用将无法获得授权。 {"module" : {// ..."requestPermissions":[{"name": "ohos.permission.DISCOVER_BLUETOOTH…

数据分析(二)自动生成分析报告

1. 报告生成思路概述 怎么快速一份简单的数据分析报告&#xff0c;注意这个报告的特点&#xff1a; --网页版&#xff0c;可以支持在线观看或者分享HTML文件 --标题&#xff0c;动图&#xff0c;原始数据应有尽有 --支持交互&#xff0c;比如plotly交互画面&#xff0c;数据…

索引聚簇因子clustering_factor太大导致不走索引

查询条件超过一个月就不走索引&#xff1a; 检查表的block数和数据行数&#xff1a; select blocks,num_rows from dba_tables where table_name‘MS_MZXX’;blocks:618687 num_rows:20335462 查看聚簇因子clustering_factor的数&#xff1a;select clustering_factor from d…

npm详解:掌握package.json配置

package.json 文件中的 scripts 配置允许你定义一系列脚本命令&#xff0c;这些命令可以通过 npm run <script-name> 来执行。下面是一些常见的 scripts 配置&#xff0c;以及它们的详解和举例。 常见的 scripts 配置 start 这是最常用的脚本&#xff0c;通常用于启动应…

力扣OJ题——随机链表的复制

题目&#xff1a; 138. 随机链表的复制 给你一个长度为 n 的链表&#xff0c;每个节点包含一个额外增加的随机指针 random &#xff0c;该指针可以指向链表中的任何节点或空节点。 要求&#xff1a;构造这个链表的 深拷贝 深拷贝应该正好由 n 个 全新 节点组成&#xff0c;其中…

Vulhub 练习 DC-4靶机完整复现

1.工具 kali:攻击机 IP地址&#xff1a;192.168.200.4 DC-4&#xff1a;靶机 IP地址&#xff1a;暂时未知 2.注意 这里搭建环境两台机器应该选用同类的网络连接方式&#xff1a;这里两台的连接方式为模式 二、信息收集 1.主机发现 找寻同网段下存活的主机&#xff08;可…

ChatGPT调教指南 | 咒语指南 | Prompts提示词教程(二)

在我们开始探索人工智能的世界时&#xff0c;了解如何与之有效沉浸交流是至关重要的。想象一下&#xff0c;你手中有一把钥匙&#xff0c;可以解锁与OpenAI的GPT模型沟通的无限可能。这把钥匙就是——正确的提示词&#xff08;prompts&#xff09;。无论你是AI领域的新手&#…

不要抱怨,不如抱 Java 运算符吧 (1)

本篇会加入个人的所谓‘鱼式疯言’ ❤️❤️❤️鱼式疯言:❤️❤️❤️此疯言非彼疯言 而是理解过并总结出来通俗易懂的大白话, 小编会尽可能的在每个概念后插入鱼式疯言,帮助大家理解的. &#x1f92d;&#x1f92d;&#x1f92d;可能说的不是那么严谨.但小编初心是能让更多人…

Windows系统中定时执行python脚本

背景&#xff1a;本地Windows系统指定目录下会有文件的修改新增&#xff0c;这些变化的文件需要定时的被上传到git仓库中&#xff0c;这样不需要每次变更手动上传了。 首先编写一个检测文件夹下文件变化并且上传git仓库的python脚本(确保你已经在E:\edc_workspace\data_edc_et…

使用AOT-GAN-for-Inpainting训练自己的数据集

AOT-GAN-for-Inpainting是一个开源的图像修复项目,其对 Places2 数据集的效果表明,该模型在 FID 方面明显优于最先进的模型,相对改进了 1.8%。一项包括 365 多名受试者的用户研究进一步验证了 AOT-GAN 的优越性。其开源的模型在logo去除、面部修复和物体移除上取得良好效果。…

一键安装ROS适用于Ubuntu22/20/18

一键安装ROS适用于Ubuntu22/20/18 1、简介 ROS&#xff08;Robot Operating System&#xff0c;机器人操作系统&#xff09;是一个用于机器人软件开发的框架。它提供了一套工具和库&#xff0c;用于机器人应用程序的开发、测试和部署。ROS是由美国斯坦福大学机器人实验室&…

笔试题详解(C语言进阶)

前言 欢迎阅读本篇文章&#xff01;本篇文章通过一个笔试题来加强我们对C语言的理解&#xff0c;希望对你有帮助。后续我会写一个栏目&#xff0c;集合我见到的C语言题目&#xff0c;进行分析讲解。 1、题目一 判断下面程序的输出结果&#xff1a;(下面说的地址4/8字节是因为对…