5

我已经阅读了大量关于为特定实现选择正确集合的文章,并且我知道最终它将归结为对真实数据进行基准测试,但是当我忙于这样做时:

  • c# 中的哪些排序集合允许修改包含的项目?我似乎找不到任何东西?

  • 这是因为修改可能会被实现为删除然后重新插入,从而使显式的“修改”功能毫无意义?

我需要一个集合(自定义或标准库),并对其执行以下操作。

  • 插入 - 经常
  • 删除 - 经常
  • 修改 - 经常
  • 选择前 X 个元素 - 每次发生上述任何情况时,以及更多同时发生。

目前我正在使用 SortedSet,因为它提供 O(logn) 插入,但我不清楚删除性能以及如何最好地修改项目。

4

1 回答 1

1

首先,我们需要明确修改集合的含义。

通常,操作集合是指从列表中插入/删除项目。要修改单个项目,它基本上是访问该项目并修改其属性。访问项目的成本取决于集合实现,但项目属性的修改不依赖于集合。另请注意,如果集合项不可变,则无法修改它。

如果你只是想找到最好的内置集合,你基本上是在 SortedList 和 SortedSet 之间进行选择(SortedDictionary 与 SortedSet 相同)。

SortedList 在内部将数据存储为数组,因此它可以通过索引高效访问(用于获取前 X 项);SortedSet 具有更快的插入和删除(通过常数因子),但是索引访问需要在树中搜索下一个项目,在最坏的情况下是 O(log n),最好的情况是 O(1)。

除此之外,两者之间的差异很小,因为它们都实现了红黑树,只是实现细节上有所不同。

必须针对您的用户案例测量实际性能。但你已经知道了。

于 2012-04-26T18:39:07.737 回答