我需要在sortedDictionary中设置元素的值,通过索引访问。
即
sortedDictionary.Values[index] = value; // compile error
请注意,以下内容不正确,因为它是通过键访问的,而不是索引。
sortedDictionary[index] = value; // incorrect
我提出了以下解决方案,但直觉告诉我它很慢。我假设按密钥访问是O(log N),按索引访问是O(1),但我不确定。
sortedDictionary[sortedDictionary.ElementAt(index).Key] = value;
一些背景知识:
我正在使用SortedDictionary,因为我需要快速插入,删除,查找以及能够访问邻居元素。 (即次高或次低。)效率很重要。
答案 0 :(得分:2)
这是一个折衷方案。
你可以使用SortedList并获得更快的索引查找,但是你会牺牲插入速度。
引用MSDN:
......另一个区别 这是
SortedDictionary<(Of <(TKey, TValue>)>)
和SortedList<(Of <(TKey, TValue>)>)
类SortedList<(Of <(TKey, TValue>)>
) 支持高效的索引检索 键和键值通过 Keys和。返回的集合 值属性。没有必要 当重新生成列表时 属性被访问,因为 列表只是包装的 内部数组的键和值。
SortedDictionary
和SortedList
都实现了IDictionary
,因此我会将一些测试数据和代码分析器放在一起并尝试两者。
如果两者都不够快,您可能需要开始考虑使用Dictionary
(快速插入,更新和密钥查找)并在第二个数据结构中手动维护索引。