- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在使用 C# 在我的项目中实现 MRU(最近使用)缓存。
我在谷歌上搜索了一些关于 MRU 及其相反的 LRU(最近最少使用)的概念和实现,并找到了这篇文章 http://www.informit.com/guides/content.aspx?g=dotnet&seqNum=626描述了C#中MRU集合的实现。
让我困惑的是,我认为这个实现是 LRU 而不是 MRU。谁能帮我确认一下这个集合类是不是MRU?
以下代码块是整个 MRUCollection 类。谢谢。
class MruDictionary<TKey, TValue>
{
private LinkedList<MruItem> items;
private Dictionary<TKey, LinkedListNode<MruItem>> itemIndex;
private int maxCapacity;
public MruDictionary(int cap)
{
maxCapacity = cap;
items = new LinkedList<MruItem>();
itemIndex = new Dictionary<TKey, LinkedListNode<MruItem>>(maxCapacity);
}
public void Add(TKey key, TValue value)
{
if (itemIndex.ContainsKey(key))
{
throw new ArgumentException("An item with the same key already exists.");
}
if (itemIndex.Count == maxCapacity)
{
LinkedListNode<MruItem> node = items.Last;
items.RemoveLast(); //Why do we move the last than first here? The node accessed recently is moved to the front of list.
itemIndex.Remove(node.Value.Key);
}
LinkedListNode<MruItem> newNode = new LinkedListNode<MruItem>(new MruItem(key, value));
items.AddFirst(newNode);
itemIndex.Add(key, newNode);
}
public bool TryGetValue(TKey key, out TValue value)
{
LinkedListNode<MruItem> node;
if (itemIndex.TryGetValue(key, out node))
{
value = node.Value.Value;
items.Remove(node);
items.AddFirst(node);
return true;
}
value = default(TValue);
return false;
}
}
class MruItem
{
private TKey _key;
private TValue _value;
public MruItem(TKey k, TValue v)
{
_key = key;
_value = v;
}
public TKey Key
{
get { return _key; }
}
public TValue Value
{
get { return _value; }
}
}
最佳答案
在我看来它就像一个 MRU 实现。请注意搜索是如何从链表的开头开始并返回的,每当访问一个节点时,它就会移到链表的前面。在 Add() 中,使用 AddFirst() 添加节点,在 TryGetValue() 中,删除节点并将其添加到列表的前面。
关于c# - 这个算法实现是LRU还是MRU?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22002814/
我应该遍历这些数字的数组,7 0 1 2 0 3 0 4 2 3 0 3 2 1 2 0 1 7 0 1 然后将第一个(非重复数字)放入一个较小的仅包含 5 个数字的数组。 所以在前五个进入后,它看起
我正在尝试创建一个仅包含有限数量的 MRU 条目的 dict(用于帮助缓存我通过 ctypes 调用的昂贵 C 函数的输出)。这是代码: from collections import Ordered
我正在尝试增加“运行 MRU”列表中显示的项目数量。有问题的注册表项是 HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Expl
我知道 MRU 的算法及其逆向最近最少使用 (LRU)。 我认为 LRU 是合理的,因为 LRU 元素意味着它将来至少有可能使用它。但是,MRU 元素意味着该元素将来很有可能被使用,为什么要驱逐它呢?
当我在 $HOME 目录的根目录中打开 CtrlP 时,CtrlP 的默认文件模式太慢。这是因为我的主目录中有太多文件和目录。 我已经按照this answer加快了扫描速度使用 ag 命令代替。然而
我真正需要的是一种表格形式,它允许我一次更新多行,同时像交互式报告一样可过滤。有没有可能这甚至是遥远的可能? 我还想劫持在激活“删除”功能时出现的表格形式上的行复选框,并使用它们来选择根据公共(pub
当我在 $HOME 目录的根目录中打开 CtrlP 时,CtrlP 的默认文件模式太慢。这是因为我的主目录中有太多文件和目录。 我已经按照this answer加快了扫描速度使用 ag 命令代替。然而
我正在研究一个将实现缓存逐出策略的简单数据结构。我想实现的两种可能情况是 LRU and MRU 我正在寻找一种类似 map 的数据结构,其中键可能是时间(或者可能只是自动递增的整数),以了解最近使用
我的目标是创建一个组合框,它在打开时显示任何字符串列表(这是标准行为),但是当用户选择其中一个字符串时,它会添加到列表顶部的“最近使用”下分隔符。 本质上,我想要一个与在 MS Word 中选择字体的
我已经将 ctl+tab 和 ctl+shift+tab 重新映射到 Window.NextTab 和 Window.PreviousTab。 但是当我调用 File.Close 时,Visual S
我知道 Visual Studio 2017 现在支持所有 SKU(企业、专业和社区)的无注册、并行安装解释 here . 我们需要访问 VS2017 最近使用 (MRU) 解决方案和项目的列表。 对
首先,我是 C# 编程的新手,我需要尽快创建一个简单的 MRU。 嗯,问题是我已经尝试查看一些在线示例,但我发现它们有点太困惑了...... 那么,有没有人可以在 toolstripmenuitem
我想清除起始页上的项目列表...我该怎么做?我知道我可以在注册表中找到它,但是有批准的路线吗? 最佳答案 有一篇 MSDN 文章 here这建议您将项目移动到新目录。 但是,正如您所提到的,项目列表保
当我打开 Tortoise 存储库时,它会显示我创建的所有最近使用 (MRU) 存储库的列表(测试时)。我想删除那些。 我如何编辑该列表? 最佳答案 这是我的工作路径: RBM -> Tortoise
我习惯于 CTRL+TAB/SHIFT+CTRL+TAB 分别切换到下一个和上一个选项卡,按照它们在选项卡栏上出现的顺序。 NetBeans 采用 MRU 风格,其中 CTRL+TAB 将带您到您编辑
已结束。此问题正在寻求书籍、工具、软件库等的推荐。它不满足Stack Overflow guidelines 。目前不接受答案。 我们不允许提出寻求书籍、工具、软件库等推荐的问题。您可以编辑问题,以便
我有一张 map ( std::map ),我想按最近到最近的顺序跟踪使用的 key 。 这是我尝试过的方法,但我被循环依赖的声明困住了: typedef ... key_t; typedef str
我很难按照我希望的方式为 vim 配置 CtrlP。 理想情况下,我希望 CtrlP 以最近使用的顺序打开文件列表。但是,当我开始输入时,它会切换到在当前工作目录下搜索文件。 这将允许我通过按下按钮然
我发现自己在做诸如键入命令名称的最后部分之类的事情,因为它的开头部分与其他命令一起完成。当然,大多数其他 shell 甚至还不能以这种方式完成任务。 无论如何,举个例子,我的 $PATH 中有一个名为
我是一名优秀的程序员,十分优秀!