我需要在我的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>)>
)
支持有效的索引检索
通过
键返回的集合和
值属性。没有必要
重新生成列表时
属性被访问,因为
列表只是包装
键和值的内部数组。SortedDictionary
和SortedList
都实现了IDictionary
,所以我将同时获得一些测试数据和代码探查器,然后尝试两者。
如果两者都不足够快,则可能需要开始考虑使用Dictionary
(快速插入,更新和键查找),并手动在第二个数据结构中维护索引。
关于c# - 设置SortedDictionary的第i个值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1398216/