gpt4 book ai didi

c# - 字典大小显式初始化 : pros and cons

转载 作者:太空宇宙 更新时间:2023-11-03 10:52:47 26 4
gpt4 key购买 nike

假设我们有两个选择:

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

对比

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

各自的优缺点是什么?最近我们团队发生了争执。

显式大小的可能缺点

  1. 如果项目数量少,则没有意义。
  2. 如果项目数量很大,则 Count() 会很昂贵并导致 IEnumerable 的完整枚举。
  3. 字典大小调整有效且快速 - 无需对其进行优化。

显式大小的可能优点

  1. 精确数字可以提高性能,因为调整字典大小的成本很高,最好避免这样做。

什么是更好的选择或有一些经验法则?

最佳答案

假设您正在处理大量项目并且您在 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;
}

如果您不知道 O(1) 时间每次 中的计数,您需要构造该字典,然后 just don't spend time optimizing something that's not causing a performance problem .

关于c# - 字典大小显式初始化 : pros and cons,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20785731/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com