【问题标题】:Is there a more efficient way to fliter old records out of c# dictionary [closed]有没有更有效的方法从 c# 字典中过滤旧记录[关闭]
【发布时间】:2020-10-10 23:49:47
【问题描述】:

我有一个以日期时间为键的字典列表。该日期时间与当前时间无关。

每当有新记录添加到列表中时,我还想删除列表中最新日期时间超过 24 小时的任何记录,因此我运行如下操作:

records = records.Where(x => x.Key > theDate).ToDictionary(i => i.Key, i => i.Value);

但是,由于有数万条记录,因此对每条新记录运行此操作成本很高。

有没有比我上面的方法更有效的方法来过滤/删除旧记录。

【问题讨论】:

  • 我不是 100% 确定,但也许 SortedDictionary 可能比常规 Dictionary 更有效地过滤键
  • 由于 OP 用例的性质,SortedDictionary 后面的红黑树必须经常重新平衡。 OP 应该针对他们的用例比较 SortedDictionary 和字典环的性能。
  • 字典的用例是什么?,它似乎是这个工作的错误工具..你想用它解决什么问题?
  • 每次添加新元素时都清除字典中的旧元素似乎有点矫枉过正。这样做背后的驱动力是什么?
  • 我的建议是不要在 add 时删除它们,而是在 read 时删除它们。因此,您构建了一个返回所有数据的方法,如果它看到旧数据则无法返回(并同时将其删除)。

标签: c# list dictionary


【解决方案1】:

将数据分成多个字典,每个字典对应一个小时(或基于分析的其他合适粒度)。然后,您可以保留一个包含 25 个字典的环形缓冲区以覆盖过去 24 小时,并且不返回任何超过 24 小时前的查找内容,或者只需要过滤一部分键,具体取决于具体要求。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-25
    • 2015-07-20
    • 2019-09-30
    • 1970-01-01
    相关资源
    最近更新 更多