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

标签 c# dictionary

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

是否有可能在 Dictionary 中获取整个对的引用,而不仅仅是值,所以我可以检查一个值是否存在,检查它(并且可能更新它)如果它确实使用了一次查找?

目前,我有这样的东西:

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

我想得到这个:

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

如果有替代数据结构允许这样做,我也很乐意听到。

提前致谢!

最佳答案

这是受 Mare Infinitus 的回答启发。假设你的 cache变量现在是 Dictionary<string, int>你可以把它改成 Dictionary<string, MutableInt32>其中 MutableInt32是这样写的:

// wraps an int that may change
class MutableInt32
{
  public int Value;
}

然后您可以将代码更改为

MutableInt32 val;
if (cache.TryGetValue(key, out val))
  if (val.Value < newVal) val.Value = newVal;
  else ...

关于c# - 是否可以在 C# 中获取对字典项的引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10972325/

相关文章:

c# - 元组(或数组)作为 C# 中的字典键

c# - 寻找替代太多属性(property)变更的方法

c# - LiveCharts WPF 中单独着色的数据点

c# - 如何使用 iTextSharp 将多个图像合并为单个 pdf

python - 将键=值对转换回 Python 字典

python - 把一行拆分成一个字典,里面有多层键值对

c# - 我在 Chrome 中不断收到错误 : HTTP Error 403. 14 - 禁止使用 Web 应用程序 Visual Studio 2012

c# - SqlConnection 在获取 ConnectionString 时未设置密码

python - 如何将任意选项字符串解析为 python 字典

python - 将列表列表转换为具有多个键值的字典