【发布时间】:2013-04-22 16:43:18
【问题描述】:
我正在尝试考虑有效的方法来维护小型固定有限数量的对象(几十个)的集合,这些对象会非常频繁地变化(至少每秒几次到每秒几十次)。 是否存在具有更新现有插入项的键(排名)功能的现有排序集合?
让我们考虑以下项目定义:
public class Item
{
public decimal Ranking { get; private set; }
public IIdentity Identity { get; private set; }
public IOtherInfo OtherInfo { get; private set; }
}
我将收到这些项目的传入流(通常会更新排名,有时会使之前的排名无效 - 例如可以通过将排名设置为 0 或无限来简化)。 Identity 值的变化很少(并且可以快速转换为索引 0 到 N),OtherInfo 可以更改(但可以轻松存储在单独的查找数组中),最重要的是 Ranking 将快速更改. 我在考虑 SortedCollection,但是每当排名变化(这很常见)听起来效率低下时,都需要删除和阅读项目。
任何允许更新项目及其在收藏中使用的收藏建议将不胜感激。
【问题讨论】:
-
哈希集未排序。
-
鉴于项目的数量非常小(几十个项目不算什么)我非常怀疑它是否重要。即使是糟糕的数据结构也不会对这么小的数据集造成问题。最重要的是,每秒更新几十次内容不是很多。您仍然需要数百毫秒才能进行更新。这应该只需要几十 纳秒。即使实现平庸,您也可能每秒执行数百次更新。
-
@Vladimir Schmidt 见这里:stackoverflow.com/questions/1552225/…
-
SortedDictionary 怎么样?
-
Hash Set 将只包含数据并提供良好的性能能力来添加和删除操作,因此使用 OrderBy (linq) 它带来了获得所需内容的最佳方式,不是吗?
标签: c# performance sorting collections