如何从数组中删除一些元素并选择它们?例如:classFoodefinitialize@a=[1,2,3,4,5,6,7,8,9]enddefget_areturn@aendendfoo=Foo.newb=foo.get_a.sth{|e|e[1,2,3]pfoo.get_a#=>[4,5,6,7,8,9,10]我可以用什么代替foo.get_a.sth? 最佳答案 如果不需要保留a的对象id:a=[1,2,3,4,5,6,7,8,9,10]b,a=a.partition{|e|e[1,2,3]a#=>[4,5,6,7,8,9,10]
灵感来自HowcanImarshalahashwitharrays?我想知道是什么原因Array#在以下代码中将无法正常工作:h=Hash.new{Array.new}#=>{}h[0]#=>[]h[0]["a"]h[0]#=>[]#why?!h[0]+=['a']#=>["a"]h[0]#=>["a"]#asexpected这是否与的事实有关?就地更改数组,而Array#+创建一个新实例? 最佳答案 如果您创建一个Hash使用Hash.new的block形式,每次您尝试访问实际上不存在的元素时,都会执行该block。那么,让我们看
尝试从数组中过滤一些条目。不能保证它们在master数组中,所以我正在通过迭代进行测试。total=['alpha','bravo','charlie','delta','echo']hide=['charlie','echo']pick=[]foriintotalif!hide.include?(i)putsipick.push(i)endendputspick这是行不通的。有没有更好的方法来提供这种过滤器? 最佳答案 Ruby允许您在两个数组上使用公共(public)实例方法来获取它们的相交或互斥元素:a1=['alpha','
我有一个模型,其中有两个字段在技术上可以为空。字段名称是:is_activated和:activated_at。:activated_at仅在:is_activated设置为true时才需要。如果:is_activated为false,则不需要存在。在Rails中将此验证直接设置到ActiveRecord中的合适方法是什么? 最佳答案 您可以使用Proc在:activated_at验证器上。validates:activated_at,:presence,if:Proc.new{|a|a.is_activated?}推荐阅读:htt
我有一个Rails表单,用于创建和编辑具有has_many关系的模型。我非常熟悉带有嵌套模型的典型表单,但我当前的问题需要使用典型的FormBuilder帮助程序访问呈现某些表单元素,并使用模型本身的数据访问其他HTML元素。例如,我的顶级表单有如下内容:'customer_image_show',:locals=>{:f=>images_form}%>然后,在部分形式中,我需要做类似的事情:...但也可以从customer_images模型访问属性(例如,customer_image记录的ID)。我觉得这应该非常简单,我只是缺少一些基本的东西。任何帮助表示赞赏。这是一个Rails2.
在Ruby中,您可以使用Array#join使用可选的分隔符简单地将多个字符串连接在一起。["a","b","c"].join#=>"abc"["a","b","c"].join("-")#=>"a-b-c"我想知道是否有很好的语法糖可以用一堆bool表达式做类似的事情。例如,我需要将一堆表达式&&放在一起。但是,将使用哪些表达式由用户输入决定。所以与其做一堆cumulative_value&&=expression[:a]ifuser[:input][:a]我想先根据输入收集所有的表达式,然后&&一举将它们全部收集起来。像这样的东西:be1=x>ybe2=Proc.new{|stri
一些bang版本的Array方法像compact!,reject!,flatten!,uniq!如果未进行任何更改,则返回nil:[1,[2]].flatten!#=>[1,2][1,2].flatten!#=>nil[1,[2]].flatten#=>[1,2][1,2].flatten#=>[1,2][1,2,nil].compact!#=>[1,2][1,2].compact!#=>nil[1,2,nil].compact#=>[1,2][1,2].compact#=>[1,2]如果他们这样做,一定是有原因的。有什么想法吗? 最佳答案
我几乎不使用reverse_each方法,而是在需要向后遍历数组时调用reverse.each。所以我只是做了一些基准测试,显然reverse_each比reverse.each快得多。这是因为在使用reverse.each时,在遍历反向数组之前创建反向数组有时间因素吗?然而,在我的示例(下面)中,对于大小为4的数组,TIME(reverse)+TIME(each)-TIME(reverse.each)~1.2秒。这一次无论数组的大小如何,差异或多或少都保持稳定。我已经测试了多达100个元素。是什么导致了这一秒的差异?require'benchmark'number=10000000a
我有一个Logo模型,它的字段名称为:字符串,默认为bool值。我希望true值是唯一的,以便一次只能将数据库中的一项设置为true。如何在我的Controller中设置更新和新操作以将Logo的所有其余值设置为false?假设我有以下设置在我的数据库中模特标志名称:字符串|默认值:bool值|项目1|是的|项目2|假|第3项|假|如果我将Item2默认值更改为true,我希望它遍历所有Logo并将其余Logo设置为false,因此一次只有一个为true,所以它看起来像这样。名称:字符串|默认值:bool值|项目1|假|项目2|是的|第3项|假|提前感谢您的帮助。
我编写了一个快速的小应用程序,它获取一个包含一些关键字的基本代码文件、一个关键字替换文件,并输出一个替换了关键字的新文件。当我使用Ruby1.8时,我的输出看起来不错。现在,当使用Ruby1.9时,我替换的代码中包含换行符而不是换行符。例如,我看到类似的东西:["\r\nDimRunningNormal_1AsBoolean","\r\nDimRunningNormal_2AsBoolean","\r\nDimRunningNormal_3AsBoolean"]代替:DimRunningNormal_1AsBooleanDimRunningNormal_2AsBooleanDimRun