ruby - 改变时重复...一旦改变不再发生即停止,即稳定值

标签 ruby algorithm string computer-science

我想知道是否有一个很好的模式或更好的特定函数,它应用一个函数直到它的结果不再发生变化。

url = "http://www.zzz.com/yyy/lt%255B1%255D.jpg"
unescaped = unescape(url)
while unescaped != url do
  url = unescaped
  unescaped = unescape(unescaped)
end

虽然上面的代码基本上是 ruby​​,但我认为它作为 psudocode 具有足够的可读性。 unescaped 的第一个设置是 http://www.zzz.com/yyy/lt%5B1%5D.jpg ,然后调用循环,因为发生了变化,因此 unescaped 变为 http://www.zzz.com/yyy/lt[1].jpg ,循环再次被调用,因为再次发生了变化,但这次我们没有什么可以逃脱的,所以 urlunescaped 变得相同,打破了 while 循环。

这段代码没有任何问题,我想知道是否有更可靠的方式来表示它,可以是伪代码形式,也可以是针对我的具体情况,用 ruby 表示。

非常感谢一如既往的帮助!

最佳答案

根据 macabail 对我原来问题的回答,这里是 ruby​​ 的递归解决方案:

def rec_unescape(url)
  url == (out = CGI::unescape(url)) ? out : rec_unescape(out)
end

关于ruby - 改变时重复...一旦改变不再发生即停止,即稳定值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2202403/

相关文章:

algorithm - 我的这种二分搜索实现是否总是能正常工作?

c# - 乘除固定比例小数的最有效方法

ruby - 如何在不构建的情况下安装 gem

ruby - 如何在 Ruby 中同时翻译多个单词?

ruby-on-rails - 在 Heroku 上预编译失败,initialize_on_precompile 设置为 false

mysql - sql创建一个函数

javascript - PHP 检查文本框是否包含链接

ruby - bash 的包装,控制 STDIN 和 STDOUT

php - 在 PHP 中生成任意长度的有序(加权)组合

string - 如何检查附加 slice 是否等于字符串?