Dictionary.ContainsKey() 比 FirstOrDefault() 好吗?

Is Dictionary.ContainsKey() any better than FirstOrDefault()?

我知道,一百万的任何东西都不会表现出色。但我现在需要那部分知识。

我有一个字典和一个字符串[]。字典中的boolean只是为了填充space。让我们想象一下,作为一个库存系统只是为了让事情变得更容易。

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

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 和其他具有相似的性能。

另外,我只希望我的用户对我的库存有最好的体验(a.k.a。没有滞后),所以我经常考虑这样的事情。

这里有两个权衡 space 和时间。

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

Dictionary(或 HashSet)中的查找时间基本上与条目数 O(1) 无关,而对于数组则线性增加 O(N)。

所以有一定数量的项目,Dictionary(或 HashSet)开始变得相当快。而100万肯定在这个门槛之上。