2

我需要在我的 sortedDictionary 中设置一个元素的值,通过索引访问。

IE

sortedDictionary.Values[index] = value; // compile error

请注意,以下内容不正确,因为它是通过键而不是索引访问的。

sortedDictionary[index] = value; // incorrect

我想出了以下解决方案,但直觉告诉我它很慢。我假设按键访问是O(log N),索引访问是O(1),但我不确定。

sortedDictionary[sortedDictionary.ElementAt(index).Key] = value;

一些背景:

我使用 SortedDictionary 是因为我需要快速插入、删除、查找以及能够访问相邻元素。(即次高或次低。)效率很重要。

4

1 回答 1

2

这有点权衡取舍。

您可以使用 SortedList 并获得更快的索引查找,但您会牺牲插入速度。

引用MSDN

SortedDictionary<(Of <(TKey, TValue>)>)...和SortedList<(Of <(TKey, TValue>)>)类 之间的另一个区别 是SortedList<(Of <(TKey, TValue>)>) 通过 Keys 和 Values 属性返回的集合支持对键和值的高效索引检索。访问属性时不必重新生成列表,因为列表只是内部键和值数组的包装器。

两者都SortedDictionary实现SortedListIDictionary,所以我会一起获取一些测试数据和代码分析器并尝试两者。

如果两者都不够快,您可能需要开始考虑使用Dictionary(快速插入、更新和键查找)并手动维护第二个数据结构中的索引。

于 2009-09-09T08:32:44.070 回答