如何高效地返回分类列表中的第一个和最后一个项目<&燃气轮机;在C#中?

如何高效地返回分类列表中的第一个和最后一个项目<&燃气轮机;在C#中?,c#,sortedlist,C#,Sortedlist,我的问题与下面的问题类似,但使用的是SortedList,而不是原来的SortedList 似乎没有像GetKey()这样的函数,您可以简单地使用list.FirstOrDefault()和list.LastOrDefault() 如果列表为空,这两个方法将返回default(KeyValuePair) 最好使用它们,因为如果列表为空,使用list.First()和list.Last()将抛出错误。根据您(不太清楚)的问题,您希望检索列表中第一个和最后一个项目的键 SortedList实现了I

我的问题与下面的问题类似,但使用的是
SortedList
,而不是原来的
SortedList


似乎没有像
GetKey()

这样的函数,您可以简单地使用
list.FirstOrDefault()
list.LastOrDefault()

如果列表为空,这两个方法将返回
default(KeyValuePair)

最好使用它们,因为如果列表为空,使用
list.First()
list.Last()
将抛出错误。

根据您(不太清楚)的问题,您希望检索列表中第一个和最后一个项目的键

SortedList
实现了
IEnumerable
以便执行以下操作:

sortedList.FirstOrDefault().Key

我会归还这些钥匙

编辑: 正如@mjwills所建议的,就性能而言,使用
Keys
属性是一个更好的主意,因为它实现了
IList
,并且
LastOrDefault
经过优化以处理此类情况(不获取整个集合以获取最后一项):

使用IEnumerable.LastIEnumerable.LastOrDefault方法仅对IList值有效。让我们看一下-访问非IList的最后一项需要遍历所有项

为了提高效率,可以更好地依赖IList()类型的或属性:

var sl=new SortedList();
对于(变量i=0;i<50000;i++){
sl.Add(i.ToString(“X8”),i);
}       
WriteLine(“SortedList是IList:+(sl是IList));
WriteLine(“SortedList中的Keys属性为IList:+(sl.Keys为IList));
Console.WriteLine(“\n\n性能度量-获取最后一个键:”);
var firstKey=sl.First().Key;
watch.Restart();
var lastKey=sl.Last().Key;
看,停;
WriteLine(“*非IList访问获取{0}(第一个键:{1},最后一个键:{2})”,watch.appeased.totalmillizes,firstKey,lastKey);
firstKey=sl.Keys.First();
watch.Restart();
lastKey=sl.Keys.Last();
看,停;
WriteLine(“*IList访问获取{0}(第一个键:{1},最后一个键:{2})”,watch.appeased.totalmillizes,firstKey,lastKey);
Console.WriteLine(“\n\n性能度量-获取最后一个值:”);
var firstValue=sl.First().Value;
watch.Restart();
var lastValue=sl.Last().Value;
看,停;
WriteLine(“*非IList访问获取{0}(第一个值:{1},最后一个值:{2})”,watch.appeased.total毫秒,firstValue,lastValue);
firstValue=sl.Values.First();
watch.Restart();
lastValue=sl.Values.Last();
看,停;
WriteLine(“*IList访问获取{0}(第一个值:{1},最后一个值:{2})”,watch.appeased.totalMillicles,firstValue,lastValue);
Console.WriteLine(“\n\n性能度量-按键获取最后一个值:”);
watch.Restart();
lastKey=sl.Keys.Last();
lastValue=sl[lastKey];
看,停;
WriteLine(“*IDictionary访问采用{0}(最后一个键:{1},最后一个值:{2})”,watch.appeased.totalmillizes,lastKey,lastValue);
/*
执行结果:
SortedList为IList:False
SortedList中的Keys属性为IList:True
性能度量-获取最后一个关键点:
*非IList访问采用0.7146(第一个键:00000000,最后一个键:0000C34F)
*IList访问采用0.0032(第一个键:00000000,最后一个键:0000C34F)
性能度量-获取最后一个值:
*非IList访问采用0.7366(第一个值:0,最后一个值:49999)
*IList访问采用0.0003(第一个值:0,最后一个值:49999)
性能度量-按键获取最后一个值:
*IDictionary访问采用0.0036(最后一个键:0000C34F,最后一个值:49999)
*/

首先对
有效吗?你认为最后一次你会用什么索引?在我看来这是我的错。我只读了第一个答案。“似乎没有像GetKey()这样的函数。”您想要键还是项目?可能更快(假设它是
O(1)
),那么获取
LastOrDefault
会直接跳到最后一个@vc74?哦,酷。我不知道。
sortedList.LastOrDefault().Key
sortedList.Keys.FirstOrDefault()
sortedList.Keys.LastOrDefault()