设置SortedDictionary的第i个值

时间:2009-09-09 08:05:48

标签: c# .net collections sorteddictionary

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

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

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

sortedDictionary[index] = value; // incorrect

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

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

一些背景知识:

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

1 个答案:

答案 0 :(得分:2)

这是一个折衷方案。

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

引用MSDN

  

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

SortedDictionarySortedList都实现了IDictionary,因此我会将一些测试数据和代码分析器放在一起并尝试两者。

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