【问题标题】:Is Dictionary.ContainsKey() any better than FirstOrDefault()?Dictionary.ContainsKey() 是否比 FirstOrDefault() 更好?
【发布时间】:2019-04-26 18:40:53
【问题描述】:

我知道,没有一百万的东西会是高性能的。但我现在需要这些知识。

我有一个字典和一个字符串[]。字典中的布尔值只是为了填充空间。让我们把它想象成一个库存系统,只是为了让事情变得更容易。

在这个库存中,我想检查我是否已经拿到了一件物品。所以我要做的是:

if (dic.ContainsKey(item_id)) // That could be a TryGetValue() as well.
{
    // Do some logic.
}

但是只有一个数组会更好吗?

if (array.FirstOrDefault(a => a = item_id))
{
    // Do magic.
}

我的意思是,在特定情况下哪个会表现更好?

我知道,这是一个愚蠢的问题,但是当您可以进行超过一百万(或超过九千,对于 DBZ 粉丝 xD)的检查时,事情会变得非常繁重,尤其是对于移动设备、VR 和其他类似的性能。

另外,我只是希望我的用户对我的库存有最好的体验(也就是没有延迟),所以我经常考虑这样的事情。

【问题讨论】:

  • 值得注意的是,如果您只想要字典中键的查找行为而不关心值,那么Hashset<T> 更合适。
  • 使用数组获取数据的平均时间为 N/2。对于使用二进制哈希的字典,获取数据的平均时间是 Log2(N)。

标签: c# arrays dictionary for-loop lookup


【解决方案1】:

这里有两个空间和时间的权衡。

与数组相比,字典是一种相对较重的结构。

字典(或 HashSet)中的查找时间如果基本上与条目数 O(1) 无关,而随着数组线性增加 O(N)。

因此,在某些项目中,Dictionary(或 HashSet)开始变得相当快。 100 万肯定高于这个阈值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-06-15
    • 1970-01-01
    • 2023-04-02
    • 1970-01-01
    • 2011-01-10
    • 2015-04-08
    • 2012-08-19
    • 2011-03-29
    相关资源
    最近更新 更多