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万肯定在这个门槛之上。
我知道,一百万的任何东西都不会表现出色。但我现在需要那部分知识。
我有一个字典和一个字符串[]。字典中的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万肯定在这个门槛之上。