我有一个简单的'缓存'基础架构,看起来有点如下:
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<>
更适合的课程?
答案 0 :(得分:1)
如果您需要查找与字符串开头相对应的元素,请考虑Trie。它实际上是一个图形(树),每个顶点都有一个字母。代码从包含字符串的第一个字母的一个根开始,使用相应的第二个节点移动到链接节点,依此类推。
基类库中没有提供实现。有关示例实现,请参阅http://geekyisawesome.blogspot.com.au/2010/07/c-trie.html。
答案 1 :(得分:0)
正如阿克顿所说,特里可能很合适。如果您想坚持使用框架类,您可以选择以下选项: