字典大小显式初始化:优点和缺点

时间:2013-12-26 13:30:34

标签: c# .net

假设我们有两个选择:

public static Dictionary<TK, TV> GetDictionary(IEnumerable<TK> keys)
  {
      var result = new Dictionary<TK, TV>();
      ...
      return result;
  }

VS

public static Dictionary<TK, TV> GetDictionary(IEnumerable<TK> keys)
  {
      var result = new Dictionary<TK, TV>(keys.Count());
      ...
      return result;
  }

每种的优点和缺点是什么? 最近在我们的团队中我们有一个争论。

明确大小的可能缺点

  1. 如果项目数量很少,那就毫无意义了。
  2. 如果项目数量很大,则Count()很昂贵,导致IEnumerable的完全枚举。
  3. 字典调整大小有效且快速 - 无需优化它。
  4. 显式尺寸的可能优点

    1. 精确的数字增益性能'导致字典调整大小是昂贵的并且更好地避免它。
    2. 什么是更好的选择还是有一些经验法则?

1 个答案:

答案 0 :(得分:2)

假设您正在处理大量项目,您在O(1)时间内知道此号码,我会考虑向Dictionary提供此信息。一般来说,如果预先计算某些东西很便宜,可能会在某些情况下产生影响。

因此,在您的情况下,如果您真的使用了大量项目,并且能够提供计数而不实际枚举它们(这是Count()扩展方法的作用),那么请继续。在实践中,这意味着您应该将至少 ICollection<T>传递给您的方法:

public static Dictionary<TK, TV> GetDictionary(ICollection<TK> keys)
{
    var result = new Dictionary<TK, TV>(keys.Count);
    ...
    return result;
}

如果