草庐IT

iterator_range

全部标签

ruby-on-rails - Ruby 的 range step 方法导致执行速度很慢?

我有这段代码:date_counter=Time.mktime(2011,01,01,00,00,00,"+05:00")@weeks=Array.new(date_counter..Time.now).step(1.week)do|week|logger.debug"WEEK:"+week.inspect@weeks从技术上讲,代码有效,输出:SatJan0100:00:00-05002011SatJan0800:00:00-05002011SatJan1500:00:00-05002011etc.但是执行时间完全是垃圾!每周计算大约需要四秒钟。我在这段代码中是否遗漏了一些奇怪的低效

ruby-on-rails - "if (number in range) then..."的 Ruby 快捷方式

是否有以下Ruby快捷方式?if(x>2)and(x我以为我看到了类似的东西,但找不到相关的引用资料。当然,当您不知道要查找的运算符时,很难查找。 最佳答案 if(3..9).include?x#whateverend作为旁注,您还可以对范围使用三等号运算符:if(3..9)===x#whateverend这让您也可以在case语句中使用它们:casexwhen3..9#Dosomethingwhen10..17#Dosomethingelseend 关于ruby-on-rails-"i

Ruby 'Range.last' 没有给出最后一个值。为什么?

在ruby​​Range对象中使用三点表示法时,我得到:(0...5).each{|n|pn}01234当我使用“last”方法时,我得到:(0...5).last=>5我本以为是4这是一个错误吗?或者我对Range对象的概念有什么不理解的地方? 最佳答案 这是设计使然。Ruby2.0文档是morespecific:Notethatwithnoargumentslastwillreturntheobjectthatdefinestheendoftherangeevenifexclude_end?istrue.(10..20).las

ruby-on-rails - 在 RSpec 中获取 'Bad value for range'

这是我的代码:#app/models/user.rbclassUser:modeldolet(:user){FactoryGirl.create:user}it"shouldreturnthecorrectdisplayname"doexpect(user.display_name).toeql("Chuck")endend#spec/factories/users.rbFactoryGirl.definedofactory:userdoprovider"MyString"uid"MyString"name"ChuckNorris"oauth_token"MyString"oauth_

ruby - 正则表达式 "empty range in char class error"

我的代码中有一个正则表达式,用于匹配url的模式并抛出错误:/^(http|https):\/\/([\w-]+\.)+[\w-]+([\w-.\/?%&=]*)?$/错误是“字符类错误中的空范围”。我发现原因在([\w-.\/?%&=]*)?部分。Ruby似乎将\w-.中的-识别为范围运算符,而不是文字-。给dash加上escape后问题解决。但原来的正则表达式在我同事的机器上运行良好。我们使用相同版本的osx、rails和ruby:Ruby版本是ruby1.9.3p194,rails是3.1.6,osx是10.7.5。在我们将代码部署到我们的Heroku服务器之后,一切都运行良好。

ruby - 将 Ruby 字符串范围转换为 Range 对象的最佳方法是什么

我有一些Ruby代码,它在命令行上以以下格式获取日期:-d20080101,20080201..20080229,20080301我想运行20080201和20080229之间的所有日期(含)以及列表中存在的其他日期。我可以获得字符串20080201..20080229,那么将其转换为Range实例的最佳方法是什么?目前,我正在使用eval,但感觉应该有更好的方法。@Purfideas我正在寻找一个更通用的答案,以将任何int..int类型的字符串转换为我猜的范围。 最佳答案 Range.new(*self.split("..").

ruby - 使用 Range 与 Times 在 Ruby 中循环差异

我正在尝试使用Ruby解决ProjectEuler问题,我使用了4种不同的循环方法,for循环、times、range和upto方法,但是times方法只产生预期的答案,而for循环,range和upto方法没有。我假设它们有些相同,但我发现它不是。有人可以解释一下这些方法之间的区别吗?这是我使用的循环结构#for-loopmethodfornin0..1putsnend01=>0..1#timesmethod2.timesdo|n|putsnend01=>2#rangemethod(0..1).eachdo|n|putsnend01=>0..1#uptomethod0.upto(1)

ruby - `Range#include?` 和 `Range#cover?` 有什么区别?

编辑修复了toro2k的评论。Range#include?和Range#cover?似乎在源代码中有所不同1,2,效率不同。t=Time.now500000.timesdo("a".."z").include?("g")endputsTime.now-t#=>0.504382493t=Time.now500000.timesdo("a".."z").cover?("g")endputsTime.now-t#=>0.454867868看源码,Range#include?似乎比Range#cover?复杂。为什么Range#include?不能只是Range#cover?的别名?它们有什么

ruby - 为什么 Range 在下降时不起作用?

这个问题在这里已经有了答案:Isthereareasonthatwecannotiterateon"reverseRange"inruby?(12个答案)关闭7年前。为什么(1..5).each会迭代1,2,3,4,5,但是(5..1)不会吧?它返回范围。1.9.2p290:007>(1..5).eachdo|i|putsiend12345=>1..51.9.2p290:008>(5..1).eachdo|i|putsiend=>5..1

python生成矩阵为何[[0 for i in range(n)] for j in range(m)]而不能[[0]*n]*m

python生成矩阵,使用[[0]*n]*m,我们会发现,当改变其中某一个元素时,整列数据都会发生改变,而使用[[0foriinrange(n)]forjinrange(m)]才可以生成正常的矩阵。这是因为,list是可变元素,而int是不可变元素,对于list存储采用指针,引用型变量,改变矩阵其中某一个元素值,导致所有行的这个位置的元素都会改变。下面具体分析:1、python列表的存储形式Python列表和C语言数组不同,并不是存的实在的值,而是存放的只想其他实例的指针。所以也就能够理解为什么python列表里里面什么东西都可以放进去而不需要考虑类型了~2、[0]*2的存储形式这里的0是同一