使用复杂度为O(lgn)而不是O(2lgn)从C#的SortedDictionary获取与键相关联的值的标准C#实践是什么?我问这个是因为似乎每次你想要提取一个值时,你需要首先调用ContainsKey来检查密钥是否在那里,并为整体复杂性增加了另一个lgn。在C ++中,我可以调用.find()并检查它返回的指针.end()并取消引用该指针,如果它不等于.end()。在Java中,存储的所有键都是引用,因此如果找不到键,则get()方法返回null,也就是O(lgn)。所以。在C#中,我可以做任何其他使用可空类型的值来获得比O(lgn)复杂度更高的值吗?感谢。
答案 0 :(得分:3)
使用复杂度为O(lgn)而不是O(2lgn)从C#的SortedDictionary获取与键相关联的值的标准C#实践是什么?
O(log(n))
等于O(2 * log(n))
,所以两次传递是 O(log(n))。
也就是说,您可以使用TryGetValue
来获取值(如果存在)使用单次传递。
答案 1 :(得分:1)
要进行单一查询,您可以使用TryGetValue
。
object value;
if(dic.TryGetValue(key, out value))
{
}