Dictionary.ContainsKey()是否比FirstOrDefault()好?

时间:2018-11-24 13:43:25

标签: c# arrays dictionary for-loop lookup

我知道,没有任何一百万个可以成为表演者。但是我现在需要这方面的知识。

我有一个词典和一个字符串[]。字典中的布尔值仅用于填充空格。让我们想象一下,作为一个库存系统只是为了使事情变得简单。

在此库存中,我想检查是否已经获得一件商品。所以我要做的是:

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

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

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

我的意思是,在特定情况下哪种效果更好?

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

此外,我只希望我的用户对我的广告资源有最佳的体验(也就是没有滞后),所以我经常考虑使用类似的东西。

1 个答案:

答案 0 :(得分:6)

在时间和空间上有两个权衡。

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

如果基本上不依赖条目O(1)的数量,则在Dictionary(或HashSet)中的查找时间,而对于数组,查找时间线性增加O(N)。

因此,在某些项目中,字典(或HashSet)开始变得相当快。一百万肯定高于这个门槛。