从SortedList或SortedDictionary中获取第i个值

23

我有一个对象的排序集合(可以是SortedList或SortedDictionary,我主要用于读取,因此添加性能不是那么重要)。如何获取第i个值?

例如,当我的集合中有数字1、2、3、4、5,并且我想要中位数(在这个例子中为3),该怎么做?

4个回答

34
你可以使用类似于以下代码的方式:
list.Values[index] 

对于已排序的列表。

使用SortedDictionary的最简单方法是使用ElementAt()方法:

dict.ElementAt(index).Value

然而,在列表情况下这比较慢。

无论哪种情况,你需要检查你的计数。如果是奇数,取 index = (list.length-1) / 2 ). 如果是偶数,取 index1 = list.length/2 AND index2 = list.length/2 - 1 并取平均值。


9

试试这样做:

list.Values[list.Count / 2];

请注意,如果Count为偶数,则真正的中位数将平均中间的两个数字。


2
谢谢,这只适用于SortedList。有没有一种方法可以在SortedDictionary中实现呢? - Grzenio

6
您可以使用以下语法在特定位置提取值:
sortedDictionaryName.ElementAt(index);

如果您想提取所需索引处元素的键或值:

sortedDictionaryName.ElementAt(index).Key //For only Key
sortedDictionaryName.ElementAt(index).Value //For only Value

3

如果您需要多次按索引在SortedDictionary中获取元素,性能会非常差。请使用SortedDictionary作为输入创建一个新的SortedList,并访问SortedList,这样可以运行得快得多。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接