集合修改项目

时间:2012-04-21 17:27:46

标签: c# collections big-o sorted

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

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

  • 这是因为修改可能会被实现为删除 然后重新插入,从而明确地修改'功能 无意义?

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

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

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

1 个答案:

答案 0 :(得分:1)

首先,我们需要澄清修改集合的含义。

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

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

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

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

必须针对您的用户案例衡量实际绩效。但你已经知道了。