哪种收藏类型最适合我的需求?

时间:2012-09-13 13:42:59

标签: .net caching

我有一个简单的'缓存'基础架构,看起来有点如下:

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

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

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

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

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

知道它可能不是最好的解决方案,我正在浏览.NET Framework以找到一个允许我更有效地执行此操作的数据结构。

是否有一个比Dictionary<>更适合的课程?

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

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

  • 字典:O(1)insert,O(1)检索,O(n)删除元素以X开头
  • SortedList:O(log(n))insert,O(log(n))检索,O(n)删除元素以X开头(假设已删除元素的数量与总元素数相比较小)。 / LI>