当前位置: 首页 > 编程语言 > C#

获取SortedDictionary中的最后一个元素分享

时间:2023-04-11 00:04:22 C#

获取SortedDictionary中的最后一个元素我看到了这个问题。如何在.Net3.5中获取SortedDictionary中的最后一个元素。您可以使用LINQ:varlastItem=sortedDict.Values.Last();您还可以获得最后一个键:varlastkey=sortedDict.Keys.Last();您甚至可以获得最后一个键值对:varlastKeyValuePair=sortedDict.Last();这将为您提供一个具有Key和Value属性的KeyValuePair。请注意,如果字典为空,这将抛出异常;如果您不想这样做,请致电LastOrDefault。Last扩展方法将为您提供结果,但它必须枚举整个集合才能这样做。遗憾的是SortedDictionary没有公开Min和Max成员,特别是考虑到它在内部由一个SortedSet>组成,它具有Min和Max属性。如果您不想要O(n),您有几个选择:切换到SortedList。同样出于某种原因,BCL默认不打包。您可以使用索引器在O(1)时间内获取最大值(或最小值)。用扩展方法扩展会很好。//确保你不调用MinLinq扩展方法。publicKeyValuePairMin(thisSortedListdict){returnnewKeyValuePair(dict.Keys[0],dict.Values[0]);//是O(1)}//确保你不调用MaxLinq扩展方法。publicKeyValuePairMax(thisSortedListdict){varindex=dict.Count-1;//O(1)再次返回newKeyValuePair(dict.Keys[index],dict.Values[index]);SortedList带有额外的惩罚。所以您可能想看看:SortedList和SortedDictionary之间有什么区别?编写您自己的SortedDictionary类。这很简单。使用SortedSet>作为内部容器,并将其作为比较的Key部分。类似于:publicclassSortedDictionary:IDictionary{SortedSet>set;//使用适当的比较器初始化publicKeyValuePairMin{get{returnset.Min;}}//O(logn)publicKeyValuePairMax{get{returnset.Max;}}//O(logn)}这是O(logn)。它没有记录,但我检查了代码。使用fiddlyreflection访问支持集,它是SortedDictionary类的私有成员,并调用Min和Max属性。可以依赖表达式来编译委托并缓存它们以提高性能。这样做是一个非常糟糕的选择。不敢相信我在建议这个。取决于其他实现,例如。对于C5中的TreeDictionary。他们有FindMin和FindMax都是O(logn)您可以使用SortedDictionary.Values.Last();或者如果你想要键和值SortedDictionary.Last();如果对你有用,需要了解更多C#学习教程,希望大家多加关注——list[Keys[Keys.Count-1]];//返回列表中的最后一个条目本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: