0

我有一个简单的“缓存”基础设施,如下所示:

Dictionary<string, object> cache = new Dictionary<string, object>();

(我在object这里用作值类型,但实际上它是一种更具体的类型。)

这个想法是按名称将许多计算值(实际上是来自 SQL 数据库的结果)存储在 tis 字典中。我需要进行快速插入和检索,主要是针对单个元素。

现在使用它,我发现有时需要通过删除所有以特定字符串开头的条目来使某些条目无效。我天真的实现是这样的:

cache.Keys.Where(key => key.StartsWith(name)).ToList().ForEach(cache.Remove);

知道这可能不是最好的解决方案,我在 .NET Framework 中四处寻找可以让我更有效地执行此操作的数据结构。

有没有比这更适合的课程Dictionary<>

4

2 回答 2

1

如果您需要查找与字符串开头相对应的元素,请考虑使用Trie。它实际上是一个图(树),每个顶点都有一个字母。代码从包含字符串第一个字母的一个根开始遍历图形,移动到具有相应第二个节点的链接节点,依此类推。

基类库中没有提供实现。有关示例实现,请参见http://geekyisawesome.blogspot.com.au/2010/07/c-trie.html

于 2012-09-13T13:46:27.333 回答
0

正如阿克顿所说,特里可能很合适。如果您想坚持使用框架类,您有以下选择:

  • 字典:O(1) 插入,O(1) 检索,O(n) 删除以 X 开头的元素
  • SortedList:O(log(n)) 插入,O(log(n)) 检索,O(n) 删除以 X 开头的元素(假设删除元素的数量与总元素的数量相比很小)。
于 2012-09-13T13:48:40.297 回答