【发布时间】:2008-10-24 16:09:57
【问题描述】:
我有一个已排序的对象集合(它可以是 SortedList 或 SortedDictionary,我将主要用于阅读,因此添加性能并不那么重要)。如何获得第 i 个值?
例如当我在集合中有数字 1、2、3、4、5 并且我想要中位数(本例中为 3)时,我该怎么做?
【问题讨论】:
标签: c# .net collections
我有一个已排序的对象集合(它可以是 SortedList 或 SortedDictionary,我将主要用于阅读,因此添加性能并不那么重要)。如何获得第 i 个值?
例如当我在集合中有数字 1、2、3、4、5 并且我想要中位数(本例中为 3)时,我该怎么做?
【问题讨论】:
标签: c# .net collections
你可以使用类似的代码
list.Values[index]
用于排序列表。
使用 SortedDictonary 最简单的方法是使用 ElementAt() 方法:
dict.ElementAt(index).Value
但是,这比列表的情况要慢。
无论哪种情况,您都需要检查您的计数。如果是奇数,取 index = (list.length-1) / 2 )。如果是偶数,则将 index1 = list.length/2 AND index2 = list.length/2 - 1 取平均值。
【讨论】:
试试这样的:
list.Values[list.Count / 2];
请注意,如果 Count 为偶数,则真正的中位数将平均中间的两个数字。
【讨论】:
您可以使用以下语法在特定位置提取值:
sortedDictionaryName.ElementAt(index);
如果要在所需索引处提取元素的键或值:
sortedDictionaryName.ElementAt(index).Key //For only Key
sortedDictionaryName.ElementAt(index).Value //For only Value
【讨论】:
如果需要多次在一个SortedDictionary中通过索引获取一个元素,性能就惨了。使用 SortedDictionary 作为输入创建一个新的 SortedList 并访问 SortedList。运行速度快很多很多倍。
【讨论】: