C#中Hashtable和Dictionary的区别与用法示例

一、Hashtable和Dictionary的区别
Hashtable和Dictionary都是用于实现键值对(Key-Value)的数据结构。它们的主要区别在于:

  1. 所属命名空间不同
    Hashtable属于System.Collections命名空间,而Dictionary属于System.Collections.Generic命名空间。Dictionary相对Hashtable更加新,支持泛型,并且提供了更加丰富的方法。

  2. 泛型支持不同
    Hashtable不支持泛型,需要使用Object类型作为键和值的类型,而Dictionary支持泛型,可以指定键和值的具体类型。例如:

Hashtable ht = new Hashtable(); // Object类型作为键和值的Hashtable
Dictionary dict = new Dictionary(); // 指定键和值的类型为string和int的Dictionary

  1. 允许空键和值不同
    Hashtable允许键和值为null,但是Dictionary只允许值为null,如果键为null会抛出异常。

二、Hashtable的用法示例
Hashtable常用的方法包括Add、ContainsKey、ContainsValue、Remove和Clear。

以实现一个简单的词频统计为例,如下实现:

Hashtable ht = new Hashtable();
string text = "Hello World! Hello C#.";
string[] words = text.Split(new char[] { ' ', '.', '!', ',' }, StringSplitOptions.RemoveEmptyEntries);
foreach (string word in words)
{
    if (ht.ContainsKey(word))
    {
        ht[word] = (int)ht[word] + 1;
    }
    else
    {
        ht.Add(word, 1);
    }
}
foreach (DictionaryEntry item in ht)
{
    Console.WriteLine("{0}出现了{1}次。", item.Key, item.Value);
}

以上代码首先将text字符串按照空格、句号、感叹号和逗号进行拆分,得到一个单词数组,然后使用Hashtable对单词进行词频统计,最后输出每个单词出现的次数。

三、Dictionary的用法示例
Dictionary常用的方法包括Add、ContainsKey、ContainsValue、TryGetValue、Remove和Clear。

以实现一个简单的学生信息管理为例,如下实现:

Dictionary<string, string> students = new Dictionary<string, string>();
students.Add("1001", "张三");
students.Add("1002", "李四");
students.Add("1003", "王五");
students.Add("1004", "赵六");

string key = "1002";
if (students.ContainsKey(key))
{
    students[key] = "周七";
    Console.WriteLine("修改成功,新名称为{0}。", students[key]);
}
else
{
    Console.WriteLine("不存在编号为{0}的学生。", key);
}

key = "1005";
string value;
if (students.TryGetValue(key, out value))
{
    Console.WriteLine("存在编号为{0}的学生,名称为{1}。", key, value);
}
else
{
    Console.WriteLine("不存在编号为{0}的学生。", key);
}

foreach (KeyValuePair<string, string> item in students)
{
    Console.WriteLine("学号:{0},姓名:{1}。", item.Key, item.Value);
}

以上代码首先创建一个Dictionary对象,保存学生编号和姓名的对应关系,然后进行增删改查等操作,最后输出所有的学生信息。其中使用TryGetValue方法可以避免Key不存在时抛出异常的情况。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#中Hashtable和Dictionary的区别与用法示例 - Python技术站

(0)
上一篇 2023年6月1日
下一篇 2023年6月1日

相关文章

  • C# Path.GetDirectoryName – 获取路径中的目录部分

    Path.GetDirectoryName是C#中一个静态方法,用于获取文件路径的目录名。 方法签名 public static string GetDirectoryName(string path); 参数说明 path:要获取目录名的文件路径(包括文件名或文件夹名)。 返回值说明 如果成功获取到目录名,返回目录名字符串,否则返回null。 使用方法 示…

    C# 2023年4月19日
    00
  • C# 设置Chart的X轴为时间轴​​​​​​​详情

    下面我为您详细讲解一下“C# 设置Chart的X轴为时间轴”的完整攻略,过程中包含两条示例。 前置知识 在了解如何设置Chart的X轴为时间轴之前,您需要掌握以下知识: C#语言基础 Chart控件使用基础 时间格式化 设定X轴为时间轴 Chart控件中的轴(Axis)类物件,其中有多种轴如X轴、Y轴以及二级轴等等,而控制X轴显示类型的属性有AxisType…

    C# 2023年5月15日
    00
  • WPF+SkiaSharp实现自绘弹幕效果

    下面是”WPF+SkiaSharp实现自绘弹幕效果”的完整攻略: 简介 WPF(Windows Presentation Foundation)是一个用于创建Windows桌面应用程序的技术,它提供了大量的视觉效果和控件,使得开发者可以快速地构建出富有表现力的用户界面。SkiaSharp是由Google开发的一个跨平台的2D图形渲染引擎,它可以实现在不同平台…

    C# 2023年6月6日
    00
  • ASP.NET:把ashx写到类库里并在页面上调用的具体方法

    将ashx写到类库( Class library )里并在页面上调用的具体方法, 可以带来代码可维护性和代码的可重用性,并且能够更好地分离底层实现和上层( Presentation layer )代码。 下面是具体的步骤: 创建 ASP.NET 类库项目 首先,我们需要做的就是创建一个 ASP.NET 类库项目。我们可以在 Visual Studio 中选择…

    C# 2023年6月3日
    00
  • 关于正则表达式基本语法的应用详解(必看篇)

    关于正则表达式基本语法的应用详解(必看篇) 1. 正则表达式(RegExp)是什么? 正则表达式(RegExp,又称正规表达式、正则表示式、正则表达式式、规则表达式等)是计算机科学中的一个概念。它可以用来匹配特定模式的文本,并对符合条件的文本进行操作。 2. 正则表达式的基本语法 2.1 字符组 使用方括号表示,可以匹配括号内的任意字符。 示例: var r…

    C# 2023年6月7日
    00
  • C#加密app.config中连接字符串的方法

    以下是详细讲解“C#加密app.config中连接字符串的方法”的完整攻略: 1. 什么是app.config连接字符串 在使用C#开发应用程序时,可能需要将连接数据库时使用的信息存储在app.config文件中。该文件通常被称为应用程序配置文件,其中包含有关应用程序设置的信息,包括数据库连接字符串、应用程序窗口大小、应用程序特定的设定等。 连接字符串也是应…

    C# 2023年6月7日
    00
  • WPF如何自定义TabControl控件样式示例详解

    下面是针对“WPF如何自定义TabControl控件样式示例详解”的攻略: 一、介绍 TabControl是很常用的WPF控件之一,用于在多个标签页中显示不同的内容。虽然TabControl自带的样式可以满足一般的需求,但有时候我们会想自定义TabControl的外观来符合特定的界面设计。本文将着重讲解如何自定义TabControl控件样式。 二、预备知识 …

    C# 2023年6月6日
    00
  • c# socket编程udp客户端实现代码分享

    下面是“c# socket编程udp客户端实现代码分享”的完整攻略: 一、前置知识 在进行c# socket编程udp客户端实现之前,你需要掌握以下知识: c#语言基础 socket编程基础 udp协议基础 二、实现步骤 1. 创建udp客户端 使用c#中的Socket类创建udp客户端: Socket client = new Socket(Address…

    C# 2023年5月31日
    00
合作推广
合作推广
分享本页
返回顶部