草庐IT

列出包 `MoveToFront` 不适合我

coder 2024-07-08 原文

Go 的新手并在 Go 中构建一个简单的 LRU 缓存以习惯语法和 Go 开发。

MoveToFront 列表方法有问题,它在 MoveToFront 正文中的以下检查中失败

if e.list != l || l.root.next == e 

当我从缓存中检索它时,我想将元素 (e) 移动到列表的前面,就像这样

if elem, ok := lc.entries[k]; ok {
    lc.list.MoveToFront(elem) // needs fixing
    return elem
}
return nil

出现问题的代码可以看这里第32行

https://github.com/hajjboy95/golrucache/blob/master/lru_cache/lrucache.go#L32

最佳答案

对我来说似乎有两个问题。首先,这不是 List 数据类型的用途:lc.list.PushFront()创建 List.Element 并返回指向它的指针。这不是致命的,但至少有点烦人——调用者在使用 Get 时必须深入挖掘返回的 List.Element,而不是仅仅获取值.

与此同时,您看到的失败大概是因为当 LRU 列表空间不足时,您在 Put 中删除了元素,但没有从相应的映射中删除它们。因此,稍后对刚刚删除的键的 Put 将尝试在适当的位置重新使用该元素,即使该元素已从列表中删除也是如此。要解决此问题,您需要同时持有键和值。 (在我的简单实验中,我没有看到任何失败,但问题变得很清楚。)

我稍微重组了代码并将其变成了 working example on the Go Playground .我不对适用性等做出任何 promise 。

关于列出包 `MoveToFront` 不适合我,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57542361/

有关列出包 `MoveToFront` 不适合我的更多相关文章

  1. python - 这些脚本语言中哪种更适合渗透测试? - 2

    关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭9年前。Improvethisquestion首先,我想避免一场关于语言的口水战。可供选择的语言有Perl、Python和Ruby。我想提一下,我对所有这些都很满意,但问题是我不能只专注于一个。例如,如果我看到一个很棒的Perl模块,我必须尝试一下。如果我看到一个不错的Python应用程序,我必须知道它是如何制作的。如果我看到RubyDSL或一些Ruby巫术,我就会迷上Ruby一段时间。目前我是一名Java开发人员,但计划在不久的将来

  2. ruby - 为什么 inspect for the subclasses of built-in classes 中没有列出实例变量? - 2

    当我对内置类进行子类化时,为什么inspect中的行为会发生变化。但是当我子类化一个自定义的时没有看到。classMainErrorendclassAnotherTestErrort=TestError.newputst.inspect#output:# 最佳答案 因为很多(大多数?全部?)内置类是用C语言编写的,并且覆盖#inspect。例如,Exception(StandardError的父类(superclass))定义#inspect如下:exc_inspect(VALUEexc){VALUEstr,klass;klass=

  3. ruby - 如何在 Ruby 中列出有效的 Iconv 编码? - 2

    如何在windows7下获取Ruby1.9.1中的有效Iconv编码列表? 最佳答案 也许这会有所帮助:putsEncoding.listputsEncoding.aliases它返回一个加载的编码列表,以及一个编码别名的散列:ASCII-8BITUTF-8US-ASCIIBig5CP949Emacs-MuleEUC-JPEUC-KREUC-TW...{"BINARY"=>"ASCII-8BIT","CP437"=>"IBM437","CP737"=>"IBM737","CP775"=>"IBM775","IBM850"=>"CP8

  4. ruby - 适合 Ruby 程序员的 RPG IV 书籍? - 2

    按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭11年前。我是一名Ruby程序员,由于目前的项目需要学习RPGIV。我想学习原始类型、数据结构、控制流、体系结构等。在线资源和纸质书一样好。我应该从哪本书或在线教程开始?

  5. ruby - 是否可以列出当前池中的所有数据库连接? - 2

    我在一个独立于Rails应用程序运行的守护进程中得到ActiveRecord::ConnectionTimeoutError。我将Passenger与Apache和MySQL一起用作数据库。Passenger的默认池大小为6(至少文档是这么告诉我的),因此它不应使用超过6个连接。我已将ActiveRecord的池大小设置为10,尽管我认为我的守护进程应该只需要一个连接。我的守护进程是一个具有多个线程的进程,它在这里和那里调用ActiveRecord以将内容保存到它与Rails应用程序共享的数据库中。我需要弄清楚的是线程是否根本无法共享一个连接,或者它们是否只是不断请求新连接而不释放它们

  6. ruby - Lisp - 是否适合网络编程/应用程序(交互式)? ruby 的方式是? php的方式是? - 2

    Lisp是否适合Web编程/应用程序(交互式),就像ruby​​和php一样?需要考虑的事情是:易于使用可部署性难度(尤其是对于编程初学者而言)(编辑)在阅读PaulGraham'sessay之后,我特别提到了CommonLisp.将是我的第一门编程语言。在这方面。这样做合适吗?我听说Clojure的宏功能不如CommonLisp的强大,这就是我尝试学习Clojure的原因。它教授编程并且非常强大。 最佳答案 Lisp是一个语系,而不是单一的语言。为了稍微回答您的问题,是的,存在用于各种Lisp方言的Web框架,例如用于Common

  7. ruby-on-rails - 有没有办法在 Ruby ERB 模板中列出可用变量? - 2

    假设我有一个名为my_template.html.erb的RubyERB模板,它包含以下内容:有没有办法以编程方式列出模板中的所有可用变量?例如下面的方法:deflist_out_variablestemplate=File.open("path_to/my_template.html.erb","rb").readerb=ERB.new(template)erb.this_method_would_list_out_variablesend会返回类似的东西:['div1','div2','div3']如有任何帮助,我们将不胜感激。谢谢,迈克 最佳答案

  8. ruby - Module.private_constant 有什么作用?有没有办法只列出私有(private)常量? - 2

    从Ruby1.9.3开始,我们可以创建私有(private)常量:moduleMclassC;endprivate_constant:Cend是否有关于此功能的良好文档?有没有办法只获取类似于调用constants的私有(private)常量的名称 最佳答案 在Ruby1.9.3之前,没有私有(private)常量这样的东西。不过,要获得所有常量的列表,您可以简单地使用constants。moduleModCONST="value"endMod.constants#=>[:CONST]从1.9.3开始,添加了private_cons

  9. Ruby,哪个异常最适合处理未设置的环境变量? - 2

    我编写的脚本在启动时运行,需要设置环境变量,但是Ruby的Exceptions,是最好的?我使用了LoadError,我只是想尽可能具有描述性并遵循适当的约定。其次,除了检查环境变量的长度外,我找不到其他方法来查看是否设置了环境变量,但这似乎不太优雅。beginraiseLoadErrorifENV['FOO'].to_s.length==0system"openhttp://example.com/"+ENV['FOO']rescueException=>eputs"=>#{e}FOOenvironmentvariablenotset"end 最佳答案

  10. ruby - 列出 Rails Controller 实例变量 - 2

    我试图列出Controller中的实例变量但想出了irb>HomeController.instance_variable_names=>["@visible_actions","@inheritable_attributes","@controller_path","@action_methods","@_process_action_callbacks"]我在Action上试了一下irb>HomeController.action("index").instance_variable_names=>[]那么Controller实例变量属于什么? 最佳答案

随机推荐