键值查找的更简单的数据结构
本文关键字:数据结构 更简单 键值 查找 | 更新日期: 2023-09-27 18:04:55
对于一小组键/值对(默认为2,最大为5),Dictionary<TKey, TValue>
似乎有点小题大做。有没有一种更简单的数据结构可以用在我的例子中?我正在缓存某些对象(例如<MyClass, double>
)的计算值,因此检索速度很重要。
谢谢
在这种情况下,List<KeyValuePair<TKey, TValue>>
(使用适当的容量创建)可能会工作得很好…但它不会是非常地道的。(为了清楚起见,您只需对每个键元素调用Equals
,完全忽略散列代码。)如果你觉得List<T>
有点重,如果你愿意,你甚至可以降到KeyValuePair<TKey, TValue>[]
。讨厌,但是嘿……这是你的代码。
你有没有试过Dictionary<TKey, TValue>
,发现它太慢了?"似乎有点小题大做"似乎不如"我已经尝试过了,对它进行了分析,发现我的应用程序花费了大量的时间来创建字典并在其中查找条目,这是不可接受的。"我需要我的应用程序具有性能特征X,而目前我只有Y。"
如果你的键类型有一个特定的顺序(如果你要在数据结构上执行更多的查找而不是创建实例),你可以对列表进行排序,这意味着你将对任何特定的查找进行最多3次比较。只有5个条目,你甚至可以硬编码所有可能的路径,如果你想优化到极致的话。(您甚至可能对2、3、4和5个元素有不同的实现。不过这有点傻。)这基本上是一个SortedList<TKey, TValue>
实现,但是您可能能够针对只有几个条目的场景稍微优化一下。同样,值得先尝试内置类型。
重要的是你知道这部分代码对你的整体性能有多重要,以及什么时候它"足够好",这样你就可以适当地停止。
如果键集在编译时是已知的,那么您可以简单地创建一个类(或结构),该类(或结构)具有可空属性来保存这些值。
如果使用KeyValuePair<TKey, TValue>[]
这样的数组,则可以对其排序,然后使用二进制搜索进行搜索。但是,只有当您必须排序一次然后检索多次时,这才是快速的。
我经常喜欢使用Hashtable类(http://msdn.microsoft.com/en-us/library/system.collections.hashtable.aspx)。
你可以做的另一件事是,不用担心自己管理任何缓存,只使用ASP.NET中的缓存。你所要做的就是包括系统。Web组装,然后你甚至可以在非Web应用中使用它。这是一篇关于在Windows窗体应用程序中使用。net缓存代码的文章。它真的很简单。
http://www.codeproject.com/KB/cs/cacheinwinformapps.aspxd .