小编典典

哪个更有效:字典 TryGetValue 或 ContainsKey+Item?

all

从 MSDN 关于Dictionary.TryGetValue Method的条目:

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

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

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

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

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

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

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);

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


阅读 112

收藏
2022-04-27

共1个答案

小编典典

TryGetValue会更快。

ContainsKey使用与 相同的检查TryGetValue,它在内部引用实际的条目位置。该Item属性实际上具有与
几乎相同的代码功能TryGetValue,只是它会抛出异常而不是返回 false。

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

2022-04-27