具有 128 位键的基于时间的字典/哈希表,即超时字典中的值

2024-02-20

我需要制作一个基于时间的字典哈希表,其大小不会无限增长。

我所说的“基于时间”具体是指,如果我要在 X 时间添加字典,我希望该项目在 X+Y 时间不存在。 Y 是超时时间。

我愿意将时间存储在字典中或作为键或值的结构。

CONTEXT:

我收到我们正在使用的库调用的“回调”,它为我提供了 4 条信息(时间、键、值、操作类型)。

operationType 可以是 start 或 end(还有其他的,但这并不重要)。

因此,如果我在 X 之后的 Y 时间段内结束,我很乐意使用这些有用的信息。否则我可以丢弃它。

问题:

这基本上是一个计时器线程,每隔 Y 间隔清理一次字典,并且主线程不断从回调中向该字典添加内容?

我使用字典来做到这一点,没有计时器,即使我删除了能够“加入”的元素,它似乎也在无限增长。

另外,是否有某种 .NET 库可以执行类似的操作?


通过使用优先级队列(或只是最小堆)和关联的字典,您可以消除定期扫描整个集合的必要。不幸的是,.NET Framework 不包含优先级队列集合,但有一些可用。我发表了一个一会儿回来。

这里的想法是,当您添加一个项目时,您将其添加到字典和堆中。如果您想通过键查找某个项目,可以在字典中查找。如果要从堆中删除第一项,可以从堆中获取它,然后使用键(数据的一部分)将其从字典中删除。

美妙之处在于,您不必扫描整个字典来确定需要删除哪些字典,而是可以查看堆的顶部:

while (heap.Count > 0 && heap.Peek().ExpirationTime < time)
{
    var item = heap.RemoveRoot();
    dictionary.Remove(item.Key);
}

这种方法的主要缺点是它需要更多的内存,因为你有字典条目的开销。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

具有 128 位键的基于时间的字典/哈希表,即超时字典中的值 的相关文章

  • 如何在 Cassandra 中存储无符号整数?

    我通过 Datastax 驱动程序在 Cassandra 中存储一些数据 并且需要存储无符号 16 位和 32 位整数 对于无符号 16 位整数 我可以轻松地将它们存储为有符号 32 位整数 并根据需要进行转换 然而 对于无符号 64 位整
  • 随着时间的推移,添加到 List 变得非常慢

    我正在解析一个大约有 1000 行的 html 表 我从一个字符串中添加 10 个字符串 td 每行到一个list td
  • 为什么 GCC 不允许我创建“内联静态 std::stringstream”?

    我将直接前往 MCVE include
  • 如何在 C++ 中标记字符串?

    Java有一个方便的分割方法 String str The quick brown fox String results str split 在 C 中是否有一种简单的方法可以做到这一点 The 增强分词器 http www boost o
  • 如何使从 C# 调用的 C(P/invoke)代码“线程安全”

    我有一些简单的 C 代码 它使用单个全局变量 显然这不是线程安全的 所以当我使用 P invoke 从 C 中的多个线程调用它时 事情就搞砸了 如何为每个线程单独导入此函数 或使其线程安全 我尝试声明变量 declspec thread 但
  • 对类 static constexpr 结构的未定义引用,g++ 与 clang

    这是我的代码 a cp p struct int2 int x y struct Foo static constexpr int bar1 1 static constexpr int2 bar2 1 2 int foo1 return
  • 访问外部窗口句柄

    我当前正在处理的程序有问题 这是由于 vista Windows 7 中增强的安全性引起的 特别是 UIPI 它阻止完整性级别较低的窗口与较高完整性级别的窗口 对话 就我而言 我想告诉具有高完整性级别的窗口进入我们的应用程序 它在 XP 或
  • WPF 数据绑定到复合类模式?

    我是第一次尝试 WPF 并且正在努力解决如何将控件绑定到使用其他对象的组合构建的类 例如 如果我有一个由两个单独的类组成的类 Comp 为了清楚起见 请注意省略的各种元素 class One int first int second cla
  • ASP.NET Core 3.1登录后如何获取用户信息

    我试图在登录 ASP NET Core 3 1 后获取用户信息 如姓名 电子邮件 id 等信息 这是我在登录操作中的代码 var claims new List
  • 使用.Net/C# 计算集合的频率分布

    是否有一种快速 简单的方法来使用 Linq 或其他方式计算 Net 集合的频率分布 例如 任意长的 List 包含许多重复项 遍历列表并计算 跟踪重复次数的巧妙方法是什么 查找列表中重复项的最简单方法是将其分组 如下所示 var dups
  • VB.NET 中的静态方法实现

    我很困惑Static在 VB NET 中的实现 在 C 中 我们可以创建静态类和静态方法来为我们的应用程序编写实用方法 现在 VB NET 让我们创建Module代替静态类 如果我们在模块中创建一个方法 默认情况下它会变成静态的 但在我的应
  • 引用的程序集自动由 Visual Studio 替换

    我有 2 个项目 一个可移植类库和一个常规单元测试项目 在可移植类库中 我使用 NuGet 来引用 Microsoft BCL 可移植包 它附带 2 个程序集 System Threading Tasks dll and System Ru
  • C# 动态/expando 对象的深度/嵌套/递归合并

    我需要在 C 中 合并 2 个动态对象 我在 stackexchange 上找到的所有内容仅涵盖非递归合并 但我正在寻找能够进行递归或深度合并的东西 非常类似于jQuery 的 extend obj1 obj2 http api jquer
  • 如何在 Linq to SQL 中使用distinct 和 group by

    我正在尝试将以下 sql 转换为 Linq 2 SQL select groupId count distinct userId from processroundissueinstance group by groupId 这是我的代码
  • 对于某些 PDF 文件,LoadIFilter() 返回 -2147467259

    我正在尝试使用 Adob e IFilter 搜索 PDF 文件 我的代码是用 C 编写的 我使用 p invoke 来获取 IFilter 的实例 DllImport query dll SetLastError true CharSet
  • 为什么C++代码执行速度比java慢?

    我最近用 Java 编写了一个计算密集型算法 然后将其翻译为 C 令我惊讶的是 C 的执行速度要慢得多 我现在已经编写了一个更短的 Java 测试程序和一个相应的 C 程序 见下文 我的原始代码具有大量数组访问功能 测试代码也是如此 C 的
  • 为什么 std::uint32_t 与 uint32_t 不同?

    我对 C 有点陌生 我有一个编码作业 很多文件已经完成 但我注意到 VS2012 似乎有以下语句的问题 typedef std uint32 t identifier 不过 似乎将其更改为 typedef uint32 t identifi
  • C# 使用“?” if else 语句设置值这叫什么

    嘿 我刚刚看到以下声明 return name null name NA 我只是想知道这在 NET 中叫什么 是吗 代表即然后执行此操作 这是一个俗称的 条件运算符 三元运算符 http en wikipedia org wiki Tern
  • DotNetZip:如何提取文件,但忽略zip文件中的路径?

    尝试将文件提取到给定文件夹 忽略 zip 文件中的路径 但似乎没有办法 考虑到其中实现的所有其他好东西 这似乎是一个相当基本的要求 我缺少什么 代码是 using Ionic Zip ZipFile zf Ionic Zip ZipFile
  • 如何确定 CultureInfo 实例是否支持拉丁字符

    是否可以确定是否CultureInfo http msdn microsoft com en us library system globalization cultureinfo aspx我正在使用的实例是否基于拉丁字符集 我相信你可以使

随机推荐

  • 打破浮动图像周围的长词

    我正在尝试在移动设备上创建页面显示 它的布局是这样的 some text around the image some image text around the image some text around the image some w
  • Django - TypeError - save() 得到了意外的关键字参数“force_insert”

    我是 Django 新手 我无法弄清楚这个错误 请帮助 它给出了 TypeError save 得到了意外的关键字参数 force insert 我测试了下面的代码 他们能够保存新用户注册 但现在它不会再保存了 这是我认为有问题的views
  • 以编程方式添加选项卡,C# 选项卡控件

    大家好 我想问一下 如何以编程方式添加选项卡 对于我的问题 我有一个选项卡控件 默认情况下只有一个选项卡 我有一个按钮 当我单击该按钮时 将添加另一个选项卡 所以将是两个选项卡 请帮助我使用 c 和 xaml tabControl Item
  • 在 MVC4 中使用 DotNetOpenAuth 的 LinkedIn 完整个人资料详细信息

    我的 MVC4 应用程序允许使用 LinkedIn 帐户登录 我想提取登录用户的 linkedIn 中可用的所有详细信息 目前我做了以下工作 在我的 AuthConfig cs 中 Dictionary
  • Scala 宏:类型化(又名类型检查)树和非类型化树之间有什么区别

    我正在开始使用 scala 宏 它们非常棒 但是我遇到了类型化 又名类型检查 和非类型化之间的区别Trees 例如 您不能调用c eval由于某种原因使用类型检查的树 我在 scala 宏文档中找不到关于此 类型检查 的文档 我知道他们仍在
  • Angularjs如何在切换路由时取消资源承诺

    我刚刚接触 Angularjs 我有一个问题 我认为与承诺有关 假设我加载路由 A 它通过其控制器发出多个 ajax 请求 allSites AllSites query id categoryID allSites promise the
  • 如何在没有映射到 web.xml 的情况下调用 servlet?

    如何使用以下 URL 调用简单的 servlet http localhost 8080 servlet MyServlet http localhost 8080 servlet MyServlet 我把它放在文件夹中 tomcat we
  • 获取系统插入的正确方法

    我一直在使用view rootWindowInsets stableInsetTop和 Bottom 来获取状态栏和导航栏的高度 但是现在已弃用 并且文档建议使用 https developer android com reference
  • 将数据从 C# 传递到 jQuery

    我是一名独立程序员 正在寻求如何最好地处理以下情况的建议 我目前正在开发一个 C Winforms 应用程序 我正在编写的新功能允许用户创建Processing js 草图以进行数据分析 我构建了一个Processing js IDE 正在
  • 使用包含 NSDictionary 的 NSMutableArray 进行快速枚举

    是否可以对包含 NSDictionary 的 NSArray 使用快速枚举 我正在运行一些 Objective C 教程 以下代码将控制台踢入 GDB 模式 NSMutableArray myObjects NSMutableArray a
  • GIT_MERGE_AUTOEDIT=默认为否

    在我的 git v 1 7 10 2 中 我必须在终端中执行以下操作 GIT MERGE AUTOEDIT no export GIT MERGE AUTOEDIT 所以 每次合并时 我都不会强制发布消息 我应该把它放在哪里 这样默认情况下
  • C++ 流作为成员变量

    我有一个 C 类 我想保存一个用于日志记录的流 在构造对象之后应该能够设置 并且可能重置 流 应该可以将流设置为std cout 或者作为记录到文件的文件流 或者作为字符串流 它只是忽略数据 a dev null各种各样的 无论如何 它应该
  • 如何创建更复杂的 Lucene 查询字符串?

    这个问题是从this https stackoverflow com questions 532365 how to get more out of lucene net问题 我的询问有两个方面 但因为两者都是相关的 所以我认为将它们放在一
  • 为什么 python 在 time.sleep() 之后不打印? [复制]

    这个问题在这里已经有答案了 我用 python 编程已经快两年了 当我看一些旧代码时 我发现了一件非常奇怪的事情 import random sys time try while True print str random randint
  • 在 ajax 请求完成之前,react.js 不会渲染

    我有一个非常简单的React js我需要制作一个组件isomorphic 在服务器上呈现 问题是组件仅在之后才呈现有用的信息ajax请求完成 如下所示 export default React createClass getInitialS
  • 将列表转换为 json 格式 - 快速且简单的方法

    假设我有一个如下所示的对象 MyObject public class MyObject int ObjectID get set string ObjectString get set 我有一个 MyObject 列表 我希望使用 str
  • 同一个表之间多对多的级联删除

    我正在尝试在 SQL Server 中的同一个表之间创建多对多关系 我有一张桌子Object有柱子ObjectId and Name 该关系遵循以下规则 一个孩子可以有多个父母 一个父母可以有很多孩子 ObjectA 可以是 Object
  • Bootstrap 模式 - 隐藏一个然后显示另一个

    我已经使用 jQueryUI 很长时间了 但最近出于美观原因切换到 Bootstrap 我现在正在努力解决我认为是一个简单的问题 并想知道其他更熟悉 Bootstrap 的人是否可以帮助我解决这个问题 我有一个用于动态创建对话框的通用函数
  • 恢复PDF中的图形状态后是否可以绘制路径的笔划?

    我在 PDF 中绘制线条 并希望以 1 1 以外的比例缩放 问题是我得到的笔划看起来像是用书法笔绘制的 在PDF中是否可以以某种方式调整路径大小 恢复图形状态 然后绘制上一个路径的笔划 这就是我在 PDF 中获得书法线条的方法 5 w wi
  • 具有 128 位键的基于时间的字典/哈希表,即超时字典中的值

    我需要制作一个基于时间的字典哈希表 其大小不会无限增长 我所说的 基于时间 具体是指 如果我要在 X 时间添加字典 我希望该项目在 X Y 时间不存在 Y 是超时时间 我愿意将时间存储在字典中或作为键或值的结构 CONTEXT 我收到我们正