草庐IT

数组方法

全部标签

ruby - 遍历数组的前 n 个元素

如何迭代一个数组的最多四个对象而不是全部?在下面的代码中,它遍历所有对象。我只需要前四个对象。objects=Products.all();arr=Array.newobjects.eachdo|obj|arr是否可以像objects=objects.slice(4)那样完成,还是迭代是唯一的方法?编辑:我还需要打印迭代发生了多少次,但我的解决方案objects[0..3](感谢这里的答案)很长。i=0;arr=Array.newobjects[0..3].eachdo|obj|arr 最佳答案 你可以通过使用获取前n个元素arr=

ruby - 如何在数组中找到出现次数最多的项目

这个问题在这里已经有了答案:HowtocountduplicateelementsinaRubyarray(14个答案)关闭3年前。如何在数组中找到出现次数最多的项目?[1,1,1,2,3].mode=>1['cat','dog','snake','dog'].mode=>dog

ruby - 在 ruby​​ 中实现平等的正确方法是什么

对于一个简单的类结构类:classTigerattr_accessor:name,:num_stripesend正确实现相等性的正确方法是什么,以确保==、===、eql?等有效,这样类的实例就可以在集合、哈希等中很好地发挥作用。编辑此外,当您想根据未在类外公开的状态进行比较时,实现相等性的好方法是什么?例如:classLadyattr_accessor:namedefinitialize(age)@age=ageendend在这里,我希望我的平等方法将@age考虑在内,但女士不会向客户公开她的年龄。在这种情况下我必须使用instance_variable_get吗?

ruby - 比较两个数组忽略Ruby中的元素顺序

我需要检查两个数组是否以任何顺序包含相同的数据。使用虚构的compare方法,我想做的是:arr1=[1,2,3,5,4]arr2=[3,4,2,1,5]arr3=[3,4,2,1,5,5]arr1.compare(arr2)#truearr1.compare(arr3)#false我使用了arr1.sort==arr2.sort,这似乎有效,但是有更好的方法吗? 最佳答案 最简单的方法是使用交叉点:@array1=[1,2,3,4,5]@array2=[2,3,4,5,1]所以声明@array2&@array1==@array2将

ruby-on-rails - 如何从 ApplicationHelper 调用 ApplicationController 方法

我想在View中提供csv链接,我将csv生成代码放在ApplicationHelper中。但是我收到此错误:undefinedmethod`send_data'for#:0x0000010151a070>引用这个:send_datacontent,:type=>"text/plain",:filename=>filename,:disposition=>'attachment'如果我将csv代码放在Controller中,它就可以正常工作。我希望使用助手来避免为每个我想为其提供csv选项的Controller定义路由(我有一堆)。如何让助手可以使用send_data(和其他必要的方法

ruby - 从Ruby中的子类方法调用父类中的方法

我已经使用super来初始化父类,但我看不到任何从子类方法调用父类的方法。我知道PHP和其他语言确实具有此功能,但找不到在Ruby中执行此操作的好方法。遇到这种情况你会怎么做? 最佳答案 如果方法同名,即你要覆盖一个方法,你可以简单地使用super。否则,您可以使用alias_method或绑定(bind)。classParentdefmethodendendclassChild 关于ruby-从Ruby中的子类方法调用父类中的方法,我们在StackOverflow上找到一个类似的问题:

ruby - 如何在不使用循环的情况下按数组中的计数分组

arr=[1,2,1,3,5,2,4]如何通过排序按组值对数组进行计数?我需要以下输出:x[1]=2x[2]=2x[3]=1x[4]=1x[5]=1 最佳答案 x=arr.inject(Hash.new(0)){|h,e|h[e]+=1;h} 关于ruby-如何在不使用循环的情况下按数组中的计数分组,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/5470725/

ruby-on-rails - Rails 3. 如何获得两个数组之间的差异?

假设我有这个包含发货ID的数组。s=Shipment.find(:all,:select=>"id")[#,#,#,#,#]带有货件ID的发票数组i=Invoice.find(:all,:select=>"id,shipment_id")[#,#]发票属于装运。装运有一张发票。所以invoices表有一列shipment_id。要创建发票,我单击“新建发票”,然后会出现一个带有“发货”的选择菜单,因此我可以选择“我要为哪个发货创建发票”。所以我只想显示尚未为其创建发票的货件列表。所以我需要一组还没有发票的货件。在上面的例子中,答案是1、4、5。 最佳答案

ruby - 了解 Ruby 中的私有(private)方法

classExampleprivatedefexample_testputs'Hello'endende=Example.newe.example_test这当然行不通,因为我们指定了显式接收者-Example(e)的实例,这违反了“私有(private)规则”。但我不明白,为什么不能在Ruby中这样做:classFoodefpublic_mself.private_m#public_m方法定义中的当前对象(即self)是Foo的实例。那么为什么不允许呢?要解决这个问题,我必须将self.private_m更改为private_m。但为什么这不同,self不是public_m中的Foo

ruby - 删除/取消定义类方法

您可以像这样为类动态定义类方法:classFooendbar=%q{defbar()"bar!"end}Foo.instance_eval(bar)但是如何做相反的事情:删除/取消定义一个类方法?我怀疑Module的remove_method和undef_method方法可以用于此目的,但我在谷歌搜索数小时后看到的所有示例都是用于删除/取消定义实例方法,而不是类方法。或者您也可以将语法传递给instance_eval来执行此操作。提前致谢。 最佳答案 classFoodefself.barputs"bar"endendFoo.bar