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日

相关文章

  • 详解asp.net core 依赖注入

    详解ASP.NET Core 依赖注入 ASP.NET Core 依赖注入是一种设计模式,它允许我们将对象的创建和管理从应用程序代码中分离出来。这种分离使得应用程序更加灵活、可测试和可维护。本攻略将详细介绍ASP.NET Core 依赖注入的概念、用法和示例。 什么是依赖注入? 依赖注入是一种设计模式,它允许我们将对象的创建和管理从应用程序代码中分离出来。在…

    C# 2023年5月16日
    00
  • C#实现上位机与欧姆龙PLC通讯(FINS)

    C#实现上位机与欧姆龙PLC通讯(FINS)的完整攻略 背景介绍 欧姆龙PLC是一种常见的现场控制设备,与上位机进行通讯可以实现对PLC控制的监管和控制。而C#作为一种常见的编程语言,也可以用来实现上位机和PLC的通讯。本文将介绍如何使用C#实现上位机和欧姆龙PLC的通讯。 实现步骤 创建C#项目 在Visual Studio中创建一个C#项目。 导入Omr…

    C# 2023年5月15日
    00
  • c#二叉树存储介绍

    下面是“c#二叉树存储介绍”的详细攻略。 1. 什么是二叉树 二叉树是一种非常常见的数据结构,它由若干个节点构成,每个节点最多只有两个子节点,由此得名。二叉树有很多种形态,比如完全二叉树、满二叉树、平衡二叉树等等。 2. 二叉树的存储方式 二叉树有两种常见的存储方式:链式存储和数组存储。链式存储是指用指针来表示二叉树中的节点之间的关系,它比较灵活,但是需要额…

    C# 2023年6月7日
    00
  • .NET Core支持Cookie和JWT混合认证、授权的方法

    在.NET Core中,我们可以使用Cookie和JWT混合认证、授权的方法来实现更加灵活和安全的身份验证和授权。本攻略将深入探讨这种方法的实现,并提供两个示例说明。 1. 混合认证、授权的基本原理 混合认证、授权的基本原理是将Cookie和JWT结合使用。当用户登录时,我们将用户信息存储在Cookie中,并将JWT作为响应的一部分返回给客户端。客户端在后续…

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

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

    C# 2023年6月6日
    00
  • C#判断本地文件是否处于打开状态的方法

    首先,我们需要明确一下什么是“本地文件处于打开状态”。通常情况下,当一个程序打开一个文件时,该文件就会被锁定,此时其他程序无法访问该文件。因此,我们在判断一个本地文件是否处于打开状态时,实际上就是判断该文件是否被其他程序锁定了。 以下是两种判断本地文件是否处于打开状态的方法: 方法一:使用try-catch语句 我们可以使用try-catch语句来判断一个本…

    C# 2023年6月1日
    00
  • C#编程实现四舍五入、向上及下取整的方法

    要实现四舍五入、向上及下取整的方法,可以使用C# Math类中的Round、Ceiling和Floor方法。 Round方法实现四舍五入 Round方法可以对一个浮点型数字进行四舍五入,方法的第一个参数是要处理的数字,第二个参数表示保留的小数位数。其中保留的小数位数可以为0,如果为0则Round方法将返回一个整数类型。 示例代码如下: double num1…

    C# 2023年6月6日
    00
  • 浅析C#中StringBuilder类的高效及与String的对比

    浅析C#中StringBuilder类的高效及与String的对比 当需要对一个字符串进行频繁的操作时,使用C#中的StringBuilder类可以优化字符串的操作效率。 StringBuilder类的特点 StringBuilder类的特点有以下几个: 可变字符串 追加、插入、替换等操作不会创建新的字符串对象,而是基于原有字符串进行修改,因此不会频繁申请新…

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