C# Dictionary和SortedDictionary的简介

C# Dictionary和SortedDictionary的简介

C#中的Dictionary和SortedDictionary都是用来存储键值对的数据结构,不同之处在于它们对数据的存储方式不同。

Dictionary

Dictionary是一个散列表,使用哈希表存储键值对。在Dictionary中,键值对的键必须是唯一的,而值可以重复。下面是一个创建Dictionary的示例:

Dictionary<string, int> dict = new Dictionary<string, int>();
dict.Add("Tom", 18);
dict.Add("Jerry", 20);

通过Add方法往Dictionary中添加元素,第一个参数是键,第二个参数是值。Dictionary可以通过键来快速查找值:

int age = dict["Tom"];

SortedDictionary

SortedDictionary也是一个键值对的数据结构,和Dictionary不同的是,SortedDictionary是有序的。SortedDictionary内部使用红黑树来实现,因此访问它的元素时有着更好的性能表现。下面是一个创建SortedDictionary的示例:

SortedDictionary<string, int> dict = new SortedDictionary<string, int>();
dict.Add("Tom", 18);
dict.Add("Jerry", 20);

通过Add方法往SortedDictionary中添加元素,第一个参数是键,第二个参数是值。SortedDictionary内部会自动根据键对元素进行排序,因此可以通过遍历SortedDictionary来得到排序后的结果:

foreach (KeyValuePair<string, int> pair in dict)
{
    Console.WriteLine(pair.Key + ": " + pair.Value);
}

示例

示例1:使用Dictionary统计单词出现的次数

以下示例演示了如何使用Dictionary统计字符串中每个单词出现的次数:

string str = "hello world, hello everyone, how are you?";
Dictionary<string, int> dict = new Dictionary<string, int>();
string[] words = str.Split(' ', ',', '?', '!');
foreach (string word in words)
{
    if (dict.ContainsKey(word))
    {
        dict[word]++;
    }
    else
    {
        dict[word] = 1;
    }
}
foreach (KeyValuePair<string, int> pair in dict)
{
    Console.WriteLine(pair.Key + ": " + pair.Value);
}

在此示例中,我们首先将字符串str通过Split方法切分成单词数组,然后通过循环遍历每个单词。在每个单词中,我们判断它是否已经在Dictionary中出现过,如果出现过就将值加1,如果没有出现过就将其加入到Dictionary中。

示例2:使用SortedDictionary查找最接近的日期

以下示例演示了如何使用SortedDictionary查找距离指定日期最近的日期:

DateTime today = DateTime.Today;
SortedDictionary<TimeSpan, DateTime> dict = new SortedDictionary<TimeSpan, DateTime>();
dict.Add(TimeSpan.Zero, today);
dict.Add(TimeSpan.FromDays(2), today.AddDays(2));
dict.Add(TimeSpan.FromDays(-1), today.AddDays(-1));
TimeSpan minDiff = TimeSpan.MaxValue;
DateTime closestDate = DateTime.MinValue;
foreach (KeyValuePair<TimeSpan, DateTime> pair in dict)
{
    TimeSpan diff = pair.Value - today;
    if (diff < TimeSpan.Zero) diff = diff.Negate();
    if (diff < minDiff)
    {
        minDiff = diff;
        closestDate = pair.Value;
    }
}
Console.WriteLine("Closest date: " + closestDate);

在此示例中,我们首先创建了一个SortedDictionary,用来存储日期和它与今天的时间差。然后我们遍历SortedDictionary,计算字典中每个日期与今天的时间差,并找到距离今天最近的日期。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C# Dictionary和SortedDictionary的简介 - Python技术站

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

相关文章

  • Entity Framework Core种子数据Data-Seeding

    Entity Framework Core 种子数据(Data Seeding)可以帮助开发者在应用程序中使用预定义的数据填充数据库。本篇文章将从概览、设计、实现等方面详细地介绍 Entity Framework Core 种子数据的完整攻略,包括,如何配置数据模型和 DbContext,如何添加种子数据,以及如何在应用启动时自动应用种子数据等。 1. 概述…

    C# 2023年6月3日
    00
  • C# File.SetAttributes(string path, FileAttributes attributes):设置指定文件或目录的属性

    File.SetAttributes(string path, FileAttributes attributes) 方法用于设置文件或文件夹的属性。它可以接受两个参数:第一个参数 path 是要设置属性的文件或文件夹的路径,第二个参数 attributes 是要设置的属性。attributes 参数可以是一个或多个 FileAttributes 枚举值的组…

    C# 2023年4月19日
    00
  • C#测量程序运行时间及cpu使用时间实例方法

    下面我将详细讲解一下如何在C#测量程序运行时间及 CPU 使用时间的实例方法。 步骤一:获取系统时间 为了测量程序运行时间和 CPU 使用时间,我们需要获取系统时间。可以使用 C# 的 System.DateTime 类来获取当前系统时间,并将其转换为毫秒数。例如: DateTime start = DateTime.Now; 这将创建一个名为“start”…

    C# 2023年6月1日
    00
  • C#微信公众号开发之服务器配置

    C#微信公众号开发之服务器配置 本文主要介绍在使用C#进行微信公众号开发过程中,如何进行服务器配置,以让公众号接收用户消息和事件以及进行回复。下面就是服务器配置的完整攻略: 1. 登录开发者平台 首先,在微信公众平台官网登录自己的开发者账号,然后进入“开发->基本配置”界面,在该界面获取自己的AppID和AppSecret,为后面进行开发提供必要的认证…

    C# 2023年6月6日
    00
  • 基于JQuery的asp.net树实现代码

    首先,我们需要明确asp.net树实现的基本原理:树结构的展示是基于DOM的树状结构展示,而实现用户对树节点的交互就需要借助JavaScript的DOM操作能力。JQuery是一款十分适合DOM操作的JavaScript框架,因此使用JQuery可以让我们方便地实现asp.net树的开发。 接下来,我们可以按以下步骤来实现基于JQuery的asp.net树:…

    C# 2023年5月31日
    00
  • ASP.NET Core MVC中的标签助手(TagHelper)用法

    接下来我会给出关于“ASP.NET Core MVC中的标签助手(TagHelper)用法”的详细讲解。 什么是标签助手? 标签助手(TagHelper)是AspNet Core MVC 框架中一项非常有用的功能,它可以让我们简化开发工作。它能够提高视图页面的代码可读性和重用性,并且可以减少我们的代码量。它主要通过HTML标签来处理视图中的数据。在视图中,标…

    C# 2023年6月3日
    00
  • C# StringBuilder和string

    C#中的StringBuilder和string都是字符串类型,但它们有一些不同的特点。本篇文章将详细讲解它们的区别以及在实际开发中的应用。 StringBuilder StringBuilder是一个可变的字符串类,使用它可以方便地进行字符串拼接和修改操作。相对于string类型,StringBuilder在频繁修改字符串时可以提供更好的性能表现。 创建S…

    C# 2023年6月8日
    00
  • C# 字符串多行显示/文本换行以textbox为例讲解

    针对这个话题,这里给出一份完整的攻略,包括文字说明和代码示例。 需求和问题描述 在C#编程中,我们常常需要把一段长文本在某个控件上进行显示,而这段长文本可能包含多行,换句话说,我们需要在控件上显示多行的文本内容,该如何实现呢? 解决方案 在C#中,要实现多行文本显示,最常见且简单的方式是使用Windows窗体(Winform)中的textbox控件,并使用其…

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