是否可以在 C# 中获取对字典项的引用?

San*_*anD 3 c# dictionary

我正在对一个被调用数亿次的函数实现缓存。缓存大小为数千万个项目。目前它是使用 a 实现的Dictionary,并且其中的查找需要花费大量时间。

是否可以获取对整个对的引用Dictionary,而不仅仅是值,这样我就可以检查一个值是否存在,如果它确实使用单个查找,则检查它(并且可能更新它)?

目前,我有这样的事情:

int val;
if (cache.TryGetValue(key, out val))
    if (val < newVal) cache[key] = newVal;
    else return val;
else
    cache.Add(key, newVal);
Run Code Online (Sandbox Code Playgroud)

我想得到这个:

Pair pair = cache.GetPair(key);
if (pair != null)
    if (pair.Value < newVal) pair.Value = newVal;
    else return pair.Value;
else
    cache.Add(key, newVal);
Run Code Online (Sandbox Code Playgroud)

如果有一种替代的数据结构允许这样做,我也很高兴听到它。

提前致谢!

Jep*_*sen 5

这是受到无限海回答的启发。假设您的cache变量现在是 aDictionary<string, int>您可以将其更改为Dictionary<string, MutableInt32>where MutableInt32,如下所示:

// wraps an int that may change
class MutableInt32
{
  public int Value;
}
Run Code Online (Sandbox Code Playgroud)

然后你可以将你的代码更改为

MutableInt32 val;
if (cache.TryGetValue(key, out val))
  if (val.Value < newVal) val.Value = newVal;
  else ...
Run Code Online (Sandbox Code Playgroud)