我正在使用 SortedDictionaries 来模拟队列(由于我有一些要求),并且我在排序字典上调用 Last() 以获取我需要出列的项目。
我只是想知道使用自定义比较器并调用 First() 或继续调用 Last() 的性能。
反编译 .NET 3.5 程序集后,我发现 SortedDictionary 类确实有一个 Count 属性,所以我猜框架只是在调用 First 时返回位置 0 的项目,而当调用 First 时返回位置 [count-1] 的项目最后被调用,对吗?
我正在使用 SortedDictionaries 来模拟队列(由于我有一些要求),并且我在排序字典上调用 Last() 以获取我需要出列的项目。
我只是想知道使用自定义比较器并调用 First() 或继续调用 Last() 的性能。
反编译 .NET 3.5 程序集后,我发现 SortedDictionary 类确实有一个 Count 属性,所以我猜框架只是在调用 First 时返回位置 0 的项目,而当调用 First 时返回位置 [count-1] 的项目最后被调用,对吗?
不。
由于SortedDictionary
没有实现IList<TValue>
(它有一个this[int]
索引器),Last()
所以别无选择,只能遍历整个事情。
Last 方法是Enumerable
类中的扩展方法。Last 的实现首先尝试将IEnumerable
(your SortedDictionary
) 转换为IList<T>
. 如果可以,那么它使用 Count 属性直接访问最后一个元素。如果不能,则必须遍历所有元素才能到达最后一个元素。SortedDictionary
没有实现IList<T>
,所以 Last 将遍历所有元素。