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



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


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

sortedDictionary[index] = value; // incorrect


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

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


一些背景:

我之所以使用SortedDictionary,是因为我需要快速插入,删除,查找并能够访问相邻元素。 (即下一个最高或下一个最低)。效率很重要。

最佳答案

这有点折衷。

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

引用MSDN


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


SortedDictionarySortedList都实现了IDictionary,所以我将同时获得一些测试数据和代码探查器,然后尝试两者。

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

关于c# - 设置SortedDictionary的第i个值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1398216/

10-10 00:06