一尘不染

有什么更有效的方法:Dictionary TryGetValue或ContainsKey + Item?

c#

从MSDN在Dictionary.TryGetValue方法上的条目:

此方法结合了ContainsKey方法和Item属性的功能。

如果找不到键,则value参数将为值类型TValue获取适当的默认值;否则,值为0。例如,对于整数类型,0(零),对于布尔类型,false(假),对于引用类型,null。

如果您的代码经常尝试访问不在字典中的键,请使用TryGetValue方法。使用此方法比捕获Item属性引发的KeyNotFoundException更有效。

此方法接近O(1)操作。

从描述中,尚不清楚它是否比调用ContainsKey然后进行查找更有效或更方便。TryGetValue只是先调用ContainsKey然后再实现Item
的实现,还是实际上比通过一次查找更有效?

换句话说,什么是更有效的(即哪个执行的查询更少):

Dictionary<int,int> dict;
//...//
int ival;
if(dict.ContainsKey(ikey))
{
  ival = dict[ikey];
}
else
{
  ival = default(int);
}

要么

Dictionary<int,int> dict;
//...//
int ival;
dict.TryGetValue(ikey, out ival);

注意:我不是在寻找基准!


阅读 265

收藏
2020-05-19

共1个答案

一尘不染

TryGetValue 会更快。

ContainsKey使用与相同的检查TryGetValue,该检查内部引用实际的输入位置。该Item属性实际上具有与几乎相同的代码功能TryGetValue,除了它将引发异常而不返回false。

使用,ContainsKey后跟Item基本上是重复的查找功能,在这种情况下,这是大部分计算。

2020-05-19